当前位置:
首页 > temp > python入门教程 >
-
Python异常
目标:
- 异常的概念
- 捕获异常
- 异常传递
- 自定义异常
1.异常的概念
- 在程序运行时,如果Python解释器遇到一个错误,会停止程序的执行,并提示一些错误信息,这就是异常
- 程序停止执行并且提示错误信息 这个动作,我们通常称之为异常
- 程序在开发时,很难将 所有的特殊情况 都处理的面面俱到,通过 异常捕获 可以针对突发事件做集中的处理,从而保证程序的稳定性和健壮性
2.捕获异常
2.1简单的捕获异常的语法
- 在程序开发中,如果对某些代码的执行不能确定是否正确,可以增加 try(尝试) 来捕获异常
- 捕获异常最简单的语法格式:
-
try: 尝试执行的代码 except: 出现错误的处理
- try 尝试,下方编写要尝试的代码,不确定是否能够正常执行的代码
- except 如果不是,下方编写尝试失败的代码
简单异常捕获演练——要求用户输入整数
-
View Code
2.2错误类型捕获
- 在程序执行时,可能会遇到不同类型的异常,并且 需要针对不同类型的异常,做出不同的相应,这个时候就需要捕获错误类型了。
-
语法如下:
-
try: #尝试执行的代码 pass except 错误类型1: #针对错误类型1,对应的处理代码 pass except 错误类型2: #针对错误类型2,对应的处理代码 pass except Exception as result: print("未知错误%s" % result)
-
- 当Python解释器抛出异常时,最后一行错误信息的第一个单词,就是错误类型
-
异常演练:
-
需求:
- 提示用户输入一个整数
- 使用8除以用户输入的整数并输出
-
View Code
-
需求:
-
捕获未知错误
- 在开发时,要预判到所有可能出现的错误,还是有一定难度的
-
如果希望程序,无论出现任何错误,都不会因为Python解释器抛出异常为终止,可以在增加一个except Exception as result
- 演示:假如没有考虑到除以0这种情况
-
View Code
2.3异常捕获完整语法
-
在实际开发中,为了能够处理复杂的异常情况,完整的异常语法如下:
-
try: #尝试执行的代码 pass except 错误类型1: #针对错误类型1,对应的处理代码 pass except 错误类型2: #针对错误类型2,对应的处理代码 pass except (错误类型3,错误类型4): #针对 错误类型3 和 错误类型4 对应的处理代码 pass except Exception as result: print("未知错误%s" % result) else: #没有异常才会执行的代码 pass finally: #无论是否有异常,都会执行的代码 print("无论是否有异常,都会执行的代码")
-
else 只有在没有异常时,才会执行的代码
-
finally 无论是否有异常,都会执行的代码
-
3.异常的传递
- 异常的传递——当函数/方法执行出现异常,会将异常传递给 函数/方法的 调用一方
-
如果 传递到主程序 任然 没有异常处理,程序才会被终止
-
1 #异常的传递性 2 def fun1(): 3 return int(input("请输入一个整数")) 4 5 def fun2(): 6 fun1() 7 8 fun2() 9 10 """ 11 请输入一个整数a 12 Traceback (most recent call last): 13 File "D:\python_DM\venv\jiaoxue\异常\异常.py", line 8, in <module> 14 fun2() 15 File "D:\python_DM\venv\jiaoxue\异常\异常.py", line 6, in fun2 16 fun1() 17 File "D:\python_DM\venv\jiaoxue\异常\异常.py", line 3, in fun1 18 return int(input("请输入一个整数")) 19 ValueError: invalid literal for int() with base 10: 'a' 20 传递顺序:3 - > 6 --> 8 21 22 """
-
-
提示:
- 在开发中,可以在主函数中增加 异常捕获
- 而在主函数中调用的其他函数,只要出现异常,都会传递到主函数的 异常捕获 中
- 这样就不需要在代码中增加大量的 异常捕获,能够保证代码的整洁
-
代码演示:
-
def fun1(): return int(input("请输入一个整数")) def fun2(): fun1() try: fun2() except Exception as result: print("未知错误%s"%result) """ 运行结果: 请输入一个整数a 未知错误invalid literal for int() with base 10: 'a' """
-
4.抛出raise异常
4.1应用场景
- 在开发中,除了 代码执行错误 Python 解释器 抛出异常之外
- 还可以根据 应用程序 特有的业务需求 主动抛出异常
示例:
- 提示用户 输入密码,如果 长度少于8,抛出异常
4.2抛出异常
- Python中提供一个Exception异常类
-
在开发时,如果满足特定业务需求时,希望 抛出异常,可以:
- 创建 Exception 的对象
- 使用 raise 关键字 抛出异常
-
需求:
- 定义一个input_password函数,提示用户输入密码
- 如果用户输入的密码长度<8,主动抛出异常
- 如果用户输入的密码长度>=8,返回密码
-
1 #抛出异常 2 def input_password(): 3 #提示用户输入密码 4 pwd = input("请输入密码") 5 #判断密码长度是否>=8,如果大于返回用户输入的密码 6 if len(pwd) >= 8: 7 return pwd 8 #如果<8 主动抛出异常 9 #创建异常对象,可以使用错误信息字符串作为参数 10 ec = Exception("密码长度不够") 11 #主动抛出异常 12 raise ec 13 14 try: 15 print(input_password()) 16 except Exception as result: 17 print(result) 18 19 """ 20 运行结果1: 21 请输入密码123456 22 密码长度不够 23 24 运行结果2: 25 请输入密码123456798 26 123456798 27 """
来源:https://www.cnblogs.com/fjfsu/p/15468013.html
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数