跳至内容

Python 异常处理

Python中,异常处理的通常使用try...except块。

try...except

python
try:
    # 可能出发异常的代码
except:
    # 异常触发后执行代码
try:
    # 可能出发异常的代码
except:
    # 异常触发后执行代码

对于每个try块,可以有0个或多个except块。不同的except块可以对不同的异常进行分别处理。

每个except块的参数指示了异常的类型。

例如

python
try:
    nums = [1, 2, 3, 4]
except ZeroDivisionError:
    print("除0异常")
except IndexError:
    print("索引越界")


# 输出:
# 索引越界
try:
    nums = [1, 2, 3, 4]
except ZeroDivisionError:
    print("除0异常")
except IndexError:
    print("索引越界")


# 输出:
# 索引越界

try...else

某些场景下,可能希望当程序没有异常时,能够执行一段代码逻辑,这个时候就要使用try...else语法。else块中定义了当try块内代码没有异常时将要执行的逻辑。

例如

python
try:
    num = int(input("输入一个数字: "))
    assert num % 2 == 0
except:
    print("捕获到异常,打印输出")
else:
    print("无异常,打印输出")
try:
    num = int(input("输入一个数字: "))
    assert num % 2 == 0
except:
    print("捕获到异常,打印输出")
else:
    print("无异常,打印输出")

else代码块不会被except捕获异常

try...finally

Python中,不管try块中是否有异常,finally块都会被执行。每个try块,最多只能有一个finally块。

finally块示例

python
try:
    numerator = 10
    denominator = 0

    result = numerator/denominator

    print(result)
except:
    print("错误: 除数不能为0.")
    
finally:
    print("程序执行完毕")
try:
    numerator = 10
    denominator = 0

    result = numerator/denominator

    print(result)
except:
    print("错误: 除数不能为0.")
    
finally:
    print("程序执行完毕")