0. 前言
1. 内建异常类型
2. 新建异常类型
class MyException(Exception): pass
class MyException(Exception):
def __init__(self, error_msg):
self.error_msg = error_msg
3. 捕获异常
3.1. 基本使用
try
:运行可能会抛出异常的代码。except
:该关键字有以下多种功能
else
:当没有出现异常时执行finally
:不管如何都执行- 其他:
def exception_handle():
try:
print("try")
raise ValueError
except IndexError as e:
raise
except (KeyError, ValueError) as e:
print(e)
except:
print("except")
raise
else:
print("else")
finally:
print("finally")
3.2. 异常类的基类与派生类
- 即抛出的异常为A,处理异常的类别为B:
- 如果B是A的基类,则A异常会被正常捕获。
- 如果A是B的基类(而不是同一类),A异常不会被捕获。
- 下面代码的输出结果是
B C D
class B(Exception):
pass
class C(B):
pass
class D(C):
pass
for cls in [B, C, D]:
try:
raise cls()
except D:
print("D")
except C:
print("C")
except B:
print("B")
- 如果将
except B
放到最前面,则输出的结果为B B B
class B(Exception):
pass~~
class C(B):
pass
class D(C):
pass
for cls in [B, C, D]:
try:
raise cls()
except B:
print("B")
except D:
print("D")
except C:
print("C")