简介
在实际开发中,为了防止异常界面直接被用户看到,往往我们会采用捕捉异常的方式来进一步处理异常。
异常捕捉
如下代码由于下标越界会导致异常
代码语言:javascript复制data = range(10)
print(data[11])
IndexError: range object index out of range
因此我们采用try except捕捉异常方式
代码语言:javascript复制try:
data = range(10)
print(data[11])
except IndexError:
print("IndexError")
IndexError
异常处理
在异常出现后,往往我们都需要做一些操作,例如关闭连接之类的,或者不出异常时做出啥处理.
异常出现后继续执行
代码语言:javascript复制try:
data = range(10)
print(data[11])
except IndexError:
print("IndexError")
finally:
print("finally")
代码语言:javascript复制IndexError
finally
不出现异常才执行
代码语言:javascript复制try:
data = range(10)
print(data[11])
except IndexError:
print("IndexError")
else:
print("finally")
代码语言:javascript复制IndexError
代码语言:javascript复制try:
data = range(10)
print(data[9])
except IndexError:
print("IndexError")
else:
print("finally")
代码语言:javascript复制9
finally
注意else和finally可以同时出现。
异常自定义
通常情况下,我们会捕捉异常后做处理,但有些情况下我们需要在发生一些异常情况后主动抛出异常。我们只需要继承Exception类,实现其中的方法即可。
代码语言:javascript复制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}")
代码语言:javascript复制exception:MyException
断言
断言也是一种异常,在断言失败后会抛出AssertionError异常
补充
- 捕捉异常后可以时代码正常执行下去,不会中途退出。
- 在实际项目中我们可能需要捕捉到更详细的日志信息,例如报错在哪一行,可以在Exception中输出如下内容即可实现显示报错在哪一行
print(traceback.format_exc())