主题
异常类型与处理机制
异常处理是程序中处理错误和异常情况的关键技术。通过异常处理,我们可以避免程序因为错误而中断,并且可以根据不同的异常类型执行不同的处理逻辑。
异常类型
Python 中有多种内建的异常类型,每种类型表示不同的错误情况。常见的异常类型包括:
ZeroDivisionError
:除以零时抛出的异常ValueError
:传入函数的值类型不符合要求时抛出的异常IndexError
:索引超出序列范围时抛出的异常FileNotFoundError
:文件未找到时抛出的异常TypeError
:传入错误类型的参数时抛出的异常KeyError
:访问不存在的字典键时抛出的异常
例如:
python
try:
x = 1 / 0
except ZeroDivisionError as e:
print("除以零错误:", e) # 输出:除以零错误: division by zero
异常处理机制
Python 提供了 try
、except
、else
和 finally
语句来处理异常。其基本结构如下:
python
try:
# 可能引发异常的代码
pass
except <异常类型> as e:
# 异常处理代码
pass
else:
# 如果没有异常,执行的代码
pass
finally:
# 无论是否有异常,都执行的代码
pass
try
和 except
try
块中放置可能引发异常的代码,except
块捕获并处理异常。
python
try:
result = 10 / 0
except ZeroDivisionError as e:
print("错误:", e) # 输出:错误: division by zero
else
和 finally
else
块在 try
块没有引发异常时执行,finally
块无论是否有异常都会执行。
python
try:
number = int(input("请输入一个整数: "))
except ValueError as e:
print("无效的输入")
else:
print(f"你输入的数字是: {number}")
finally:
print("程序执行完毕")
自定义异常
除了使用内建异常类型外,我们还可以通过继承 Exception
类来创建自定义的异常类型。
python
class CustomError(Exception):
def __init__(self, message):
self.message = message
super().__init__(self.message)
try:
raise CustomError("自定义错误发生")
except CustomError as e:
print(f"捕获到自定义异常: {e}") # 输出:捕获到自定义异常: 自定义错误发生
异常链
在处理异常时,有时需要在一个异常的处理过程中抛出另一个异常。Python 支持异常链,它允许我们保留原始异常信息。
python
try:
raise ValueError("初始错误")
except ValueError as e:
raise RuntimeError("处理过程中发生错误") from e
总结
- Python 提供了丰富的异常类型,用于表示不同的错误情况;
- 通过
try
、except
、else
和finally
可以灵活地处理异常; - 我们可以通过自定义异常类型和异常链来增强异常处理的灵活性。