「这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战」
第一部分:::异常
注意:当代码出现了异常,后面的代码都不会执行。
异常本身是类
小知识点:
在 Python 中所有的异常都是继承自 BaseException
直接分为四大类:
SystemExit:Python退出异常
KeyboardInterrupt: 键盘打断(Ctrl+C)
GeneratorExit: 生成器退出
Exception: 普通异常(只会使用这部分的异常)
第二部分:::异常处理
(1)基本的try...except...
举例子:
try:
print(11) # 这是正确的,会打印出来
print(a) # a没定义,所以会出现异常
print(22) # 因为上面一句出现了异常,所以即使这句是正确的,也不会打印
except:
print('这里出现了异常')
输出:
11
这里出现了异常
注意:try 后面必须跟上 except
(2)捕获具体的异常
except 后面可以写上捕获具体的异常类型
还可以通过as 把捕获的异常信息 储存到后面的变量里面
例子:
try:
print(11)
print(a)
print(22)
except NameError as t: #注意这个具体的异常必须和上面出现的异常一样。可以换成Exception,这是所有异常的父类
print('这里出现了异常')
print('错误的原因是:%s'%t)
输出:
11
这里出现了异常
错误的原因是:name 'a' is not defined
(3)捕获多种异常
写法一:可以写多个except
try:
pass
except TabError:
pass
except NameError:
pass
写法二:在except后面用括号把多种异常类型给括起来
try:
pass
except (NameError,TabError):
pass
如果不确定异常类型:
try:
pass
except Exception: #因为Exception里面包括所有普通异常
pass
关于 Exception 及其 子类 的解释:
代码中会出现的异常都是 Exception 的子类, 因此在 except 中只需要在最后加上 Exception 即可
在捕获异常的过程中,会从上倒下依次对比异常,找到之后就不会再往后查找
(4)更加丰富的结构:
try:
print(11)
print(a)
print(22)
except Exception as result:
print('捕获到了异常,会执行我下面的代码对异常进行处理')
print(result)
else:
print('没有捕获到异常,执行我')
finally:
print('不管有没有异常,我都会执行')
注意事项:
1.try 下面放可能出错的代码
2.except try下面的代码出错后,会执行except下面的代码
4.finally 不管try下面的代码有没有出错,始终都会执行
(5)扩展(自定义异常类型)
raise 主动抛出异常
格式:raise 异常类型
注意:raise是主动抛出后面写的异常类型
1.可以自己写自定义的异常:
class WuMou(Exception):
pass
raise WuMou('出现错误')
输出为:
Traceback (most recent call last):
File "C:/my/pycharm_work/ceshi.py", line 3, in <module>
raise WuMou('出现错误')
__main__.WuMou: 出现错误
可以捕获这个异常:
class WuMou(Exception):
pass
try:
raise WuMou('出现错误')
except WuMou as h:
print(h)
输出为:
出现错误
2.例子:
raise NameError('出现错误啦')
输出为:
Traceback (most recent call last):
File "C:/my/pycharm_work/ceshi.py", line 2, in <module>
raise NameError('出现错误啦')
NameError: 出现错误啦