2026-08-04 00:39:32
在Python中,抛出异常通常使用raise语句,它允许你主动触发一个异常。你可以抛出内置的异常类型,也可以自定义异常类型。以下是详细教程:
1. 抛出内置异常Python提供了多种内置异常类型,如ValueError、TypeError、IndexError等。你可以直接使用raise语句抛出这些异常。
def divide(a, b): if b == 0: raise ValueError("除数不能为零") return a / btry: result = divide(10, 0)except ValueError as e: print(f"捕获到异常: {e}")2. 自定义异常你可以通过继承Exception类或其子类来创建自定义异常。
class MyCustomError(Exception): passdef check_value(value): if value < 0: raise MyCustomError("值不能为负数") return valuetry: result = check_value(-1)except MyCustomError as e: print(f"捕获到自定义异常: {e}")3. 重新抛出异常在except块中,你可以使用raise不带参数来重新抛出当前捕获的异常。
try: x = int("invalid")except ValueError as e: print(f"捕获到异常: {e}") raise # 重新抛出异常4. 抛出异常并附带信息你可以在抛出异常时附带详细信息,帮助调试。
def process_data(data): if not isinstance(data, list): raise TypeError("数据必须是列表类型") if len(data) == 0: raise ValueError("数据列表不能为空") # 处理数据 return sum(data)try: result = process_data([])except (TypeError, ValueError) as e: print(f"处理数据时出错: {e}")5. 使用finally确保清理无论是否抛出异常,finally块中的代码都会执行,常用于资源清理。
file = Nonetry: file = open("example.txt", "r") data = file.read() # 处理数据except FileNotFoundError: print("文件未找到")finally: if file: file.close()6. 异常链你可以使用raise ... from ...将一个异常链接到另一个异常,保留原始异常上下文。
try: x = int("invalid")except ValueError as e: raise RuntimeError("解析整数失败") from e总结这些技巧可以帮助你编写更健壮的Python代码,有效处理错误情况。