3.5.1. 什么是异常?

在程序执行过程中,如果发生错误,Python 会引发(raise)一个异常,并导致程序崩溃。

示例 1:ValueError 异常

num = int(input("请输入一个整数: "))  # 如果输入不是整数,会引发 ValueError

如果用户输入 abcd,Python 会报错:

ValueError: invalid literal for int() with base 10: 'abcd'

示例 2:ZeroDivisionError 异常

result = 10 / 0  # 试图除以零,会引发 ZeroDivisionError

会产生错误:

ZeroDivisionError: division by zero

3.5.2. 使用 try-except 处理异常

Python 允许我们使用 try-except 结构来捕获异常,并在异常发生时执行特定的代码,而不会让程序崩溃。

try:
    num = int(input("请输入一个整数: "))
    print("你输入的整数是:", num)
except ValueError:
    print("错误: 请输入有效的整数!")

代码解析:

  • try 代码块:尝试执行可能会引发异常的代码。
  • except ValueError:如果发生 ValueError 异常,则执行 except 代码块。

3.5.3. 处理 ZeroDivisionError

try:
    numerator = int(input("请输入分子: "))
    denominator = int(input("请输入分母: "))
    result = numerator / denominator
    print("结果:", result)
except ZeroDivisionError:
    print("错误: 不能除以零!")

3.5.4. 捕获多个异常

try:
    num = int(input("请输入一个整数: "))
    result = 10 / num
    print("结果:", result)
except ValueError:
    print("错误: 请输入有效的整数!")
except ZeroDivisionError:
    print("错误: 不能除以零!")

代码解析:

  • except ValueError 处理非整数输入。
  • except ZeroDivisionError 处理除零错误。

3.5.5. 使用 except 捕获所有异常

try:
    num = int(input("请输入一个整数: "))
    result = 10 / num
    print("结果:", result)
except Exception as e:
    print("发生错误:", e)

注意:

  • Exception 是所有异常的基类,可以捕获所有类型的异常。
  • as e 允许我们获取具体的错误信息。

3.5.6. 使用 finally 语句

finally 语句无论是否发生异常,都会执行,常用于释放资源。

try:
    file = open("example.txt", "r")
    content = file.read()
    print(content)
except FileNotFoundError:
    print("错误: 文件未找到!")
finally:
    file.close()

3.5.7. 综合示例:处理用户输入错误

# 获取用户的姓名和年龄
name = input("请输入你的姓名: ")

# 设定默认值
age = -1

try:
    age = int(input("请输入你的年龄: "))
except ValueError:
    print("错误: 年龄必须是一个数字!")

print("姓名:", name)
print("年龄:", age)

执行示例:

请输入你的姓名: 李雷
请输入你的年龄: 32
姓名: 李雷
年龄: 32

如果输入错误:

请输入你的姓名: 李雷
请输入你的年龄: abc
错误: 年龄必须是一个数字!
姓名: 李雷
年龄: -1

总结

  1. 异常(Exception) 是程序运行时的错误。
  2. try-except 结构可以防止程序崩溃,并提供错误处理逻辑。
  3. 可以使用多个 except 语句处理不同的异常类型。
  4. finally 语句无论是否发生异常都会执行,常用于资源释放。
  5. 使用 Exception as e 捕获所有异常,并获取错误信息。
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐