跳到主要内容

异常处理(Exception Handling)

异常的基本概念

  • 异常(Exception) 是程序运行时发生的错误。
  • 如果没有处理,程序会中断执行并报错。
  • Python 使用 try / except 语法来捕获并处理异常,使程序更健壮。

try / except 基本语法

try:
# 可能出错的代码
except 错误类型:
# 错误发生时执行的代码

示例:

try:
number = int(input("请输入一个数字: "))
result = 10 / number
print(f"结果是: {result}")
except ValueError:
print("输入的不是有效数字")
except ZeroDivisionError:
print("不能除以零")

else 与 finally 子句

  • else:当 try 代码块没有异常时执行
  • finally无论是否出错都执行,常用于资源释放(如关闭文件)
try:
file = open("data.txt", "r")
content = file.read()
except FileNotFoundError:
print("文件不存在")
else:
print(f"文件内容: {content}")
finally:
file.close() if 'file' in locals() else None

常见的内建异常类型

异常类型出现原因
ValueError类型正确但值不合法(如 int("abc")
TypeError类型不兼容(如 "2" + 2
ZeroDivisionError除以零
IndexError索引越界(如 a[10]a 只有 5 个元素)
KeyError字典中找不到指定键
FileNotFoundError文件不存在
AttributeError对象没有这个属性
RecursionError递归太深(Python 3.5+)

捕获多个异常

可以按需捕获不同类型:

try:
# 可能出错的代码
except ValueError:
# 处理ValueError
except ZeroDivisionError:
# 处理ZeroDivisionError

也可以统一处理:

try:
# 可能出错的代码
except (ValueError, TypeError):
# 同时处理ValueError和TypeError

获取异常信息

try:
# 可能出错的代码
except Exception as e:
print(f"错误类型: {type(e).__name__}")
print(f"错误信息: {e}")
print(f"错误详情: {dir(e)}") # 查看异常对象的所有属性

主动抛出异常:raise 语句

当检测到错误情况时,可以主动抛出异常:

def divide(a, b):
if b == 0:
raise ValueError("除数不能为零")
return a / b

try:
result = divide(10, 0)
except ValueError as e:
print(e) # 输出: 除数不能为零

📚 总结

关键词说明
try / except捕获并处理运行时错误
else只有当 try 不报错时执行
finally无论是否出错都会执行(如关闭文件)
as将异常对象赋值给变量:except ValueError as e
raise主动抛出异常
常见异常类型ValueError, TypeError, ZeroDivisionError, KeyError