在实际开发中,为了防止异常界面直接被用户看到,往往我们会采用捕捉异常的方式来进一步处理异常。
如下代码由于下标越界会导致异常
data = range(10)
print(data[11])
IndexError: range object index out of range
因此我们采用try except捕捉异常方式
try:
data = range(10)
print(data[11])
except IndexError:
print("IndexError")
IndexError
在异常出现后,往往我们都需要做一些操作,例如关闭连接之类的,或者不出异常时做出啥处理.
try:
data = range(10)
print(data[11])
except IndexError:
print("IndexError")
finally:
print("finally")
IndexError
finally
try:
data = range(10)
print(data[11])
except IndexError:
print("IndexError")
else:
print("finally")
IndexError
try:
data = range(10)
print(data[9])
except IndexError:
print("IndexError")
else:
print("finally")
9
finally
注意else和finally可以同时出现。
通常情况下,我们会捕捉异常后做处理,但有些情况下我们需要在发生一些异常情况后主动抛出异常。我们只需要继承Exception类,实现其中的方法即可。
class MyException(Exception):
def __init__(self, msg):
self.msg = msg
def __str__(self):
return self.msg
try:
raise MyException("MyException")
except Exception as e:
print(f"exception:{e}")
exception:MyException
断言也是一种异常,在断言失败后会抛出AssertionError异常
print(traceback.format_exc())