Python异常 第一部分:::异常 第二部分:::异常处理

「这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战

第一部分:::异常

注意:当代码出现了异常,后面的代码都不会执行。

异常本身是类

小知识点:

在 Python 中所有的异常都是继承自 BaseException

直接分为四大类:

SystemExit:Python退出异常

KeyboardInterrupt: 键盘打断(Ctrl+C)

GeneratorExit: 生成器退出

Exception: 普通异常(只会使用这部分的异常)

第二部分:::异常处理

(1)基本的try…except…

举例子:

1
2
3
4
5
6
python复制代码try:
print(11) # 这是正确的,会打印出来
print(a) # a没定义,所以会出现异常
print(22) # 因为上面一句出现了异常,所以即使这句是正确的,也不会打印
except:
print('这里出现了异常')

输出:

11

这里出现了异常

注意:try 后面必须跟上 except

(2)捕获具体的异常

except 后面可以写上捕获具体的异常类型

还可以通过as 把捕获的异常信息 储存到后面的变量里面

例子:

1
2
3
4
5
6
7
python复制代码try:
print(11)
print(a)
print(22)
except NameError as t: #注意这个具体的异常必须和上面出现的异常一样。可以换成Exception,这是所有异常的父类
print('这里出现了异常')
print('错误的原因是:%s'%t)

输出:

11

这里出现了异常

错误的原因是:name ‘a’ is not defined

(3)捕获多种异常

写法一:可以写多个except

1
2
3
4
5
6
python复制代码try:
pass
except TabError:
pass
except NameError:
pass

写法二:在except后面用括号把多种异常类型给括起来

1
2
3
4
python复制代码try:
pass
except (NameError,TabError):
pass

如果不确定异常类型:

1
2
3
4
python复制代码try:
pass
except Exception: #因为Exception里面包括所有普通异常
pass

关于 Exception 及其 子类 的解释:

代码中会出现的异常都是 Exception 的子类, 因此在 except 中只需要在最后加上 Exception 即可

在捕获异常的过程中,会从上倒下依次对比异常,找到之后就不会再往后查找

(4)更加丰富的结构:

1
2
3
4
5
6
7
8
9
10
11
php复制代码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.可以自己写自定义的异常:

1
2
3
python复制代码class WuMou(Exception):
pass
raise WuMou('出现错误')

输出为:

1
2
3
4
arduino复制代码Traceback (most recent call last):
File "C:/my/pycharm_work/ceshi.py", line 3, in <module>
raise WuMou('出现错误')
__main__.WuMou: 出现错误

可以捕获这个异常:

1
2
3
4
5
6
7
python复制代码class WuMou(Exception):
pass

try:
raise WuMou('出现错误')
except WuMou as h:
print(h)

输出为:

出现错误

2.例子:

1
java复制代码raise NameError('出现错误啦')

输出为:

1
2
3
4
arduino复制代码Traceback (most recent call last):
File "C:/my/pycharm_work/ceshi.py", line 2, in <module>
raise NameError('出现错误啦')
NameError: 出现错误啦

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%