matinal:python 异常捕捉与异常处理

2023-10-14 14:16:33 浏览数 (2)

简介

在实际开发中,为了防止异常界面直接被用户看到,往往我们会采用捕捉异常的方式来进一步处理异常。

异常捕捉

如下代码由于下标越界会导致异常

代码语言: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中输出如下内容即可实现显示报错在哪一行
代码语言:javascript复制
print(traceback.format_exc())

0 人点赞