try…except语句的基本语法
try:
<语句>
except [<异常的名称>[,<异常类的实例变量名称>]]:
<异常处理语句>
语法的工作原理如下
- 执行try子句,在关键字try和关键字except之间的语句。
- 如果没有发生异常,忽略except子句,try子句执行后结束。
- 如果在执行try子句发生异常,则try子句下面的程序会停止执行。
- 如果异常的类型和except之后的名称相符,则对应的except子句执行。
- 如果一个异常没有与任何except匹配,则程序停留在异常处。
情况一:没有发生异常
# 没有异常的情况
try:
one = 1111/1111
print(one)
except ZeroDivisionError as e:
print("发生了异常,数值不可以除零")
允许结果:
1.0
情况二:发生异常,异常被处理
# 执行try子句发生了异常,try下面的程序不会允许
try:
one = 1111/0
print(one)
except ZeroDivisionError as e:
print("发生了异常,数值不可以除零")
允许结果
发生了异常,数值不可以除零
情况三:异常没有被处理
# 异常没有被处理
try:
one = 1111/0
print(one)
except TypeError as e:
print("发生了异常,类型错误")
运行结果,traceback跟踪了错误
Traceback (most recent call last):
File "/Users/chenjihong/PycharmProjects/test/test.py", line 2, in <module>
one = 1111/0
ZeroDivisionError: division by zero
情况四:定义了多种类型处理,发生的异常与其中一种进行匹配,成功被处理
try:
one = 1111/0
print(one)
except TypeError as e:
print("发生了异常,类型错误")
except ZeroDivisionError as f:
print("发生了异常,数值不可以除零")
允许结果
发生了异常,数值不可以除零
情况五:定义了多种类型捕捉,都是用同一种处理方式
try:
one = 1111/0
print(one)
except (TypeError,ZeroDivisionError):
print("发生了异常")
运算结果
发生了异常
情况六:捕捉全部异常,但是不定义具体捕捉的类型
try:
one = 1111/0
print(one)
except:
print("发生了异常")
运行结果
发生了异常