最近更新于 2023-04-08 00:11

环境

Windows 11 22H2 专业工作站版
Python 3.11.2

情景

捕获单个指定错误类型

try:
    print(x)
except NameError as err:
    print(err)

这里尝试打印变量 x,但是并没有定义 x,这就是一个 NameError,可以指定捕获它
file

捕获多个指定错误

try:
    print(1 / 0)
except (NameError, ZeroDivisionError) as err:
    print(err)

这里的除数为 0,属于指定要捕获的情况之一都能被捕获到

捕获所有异常

try:
    print(1 / 0)
except Exception as err:
    print(err)
else: # 可选
    print('无异常发生时执行')
finally: # 可选
    print('不管有无异常都会执行')

file

自定义异常类

class CustomException(Exception):
    def __init__(self, msg):
        super().__init__(msg)
        self.msg = msg

    def __str__(self):
        return f'CustomException: {self.msg}'

    def __del__(self):
        print('自定义异常对象销毁')

def division(x, y):
    if y == 0:
        raise CustomException('除数为 0')
    return x / y

if __name__ == '__main__':
    y = 0
    try:
        r = division(1, 0)
    except CustomException as e:
        print(e)

作者 IYATT-yx