Python Try-Except: 异常处理
上次修改时间:2026 年 1 月 15 日
Python 中的 try 关键字用于启动异常处理块,以优雅地管理运行时错误。与 except、else 和 finally 结合使用,它可以通过捕获和处理异常来防止程序崩溃。本教程涵盖了使用实际示例的错误处理技术。
异常处理允许开发人员预测潜在错误并定义恢复流程。 try 块包含可能引发异常的代码,而 except 块处理特定的错误类型。可选的 else 和 finally 子句管理成功执行和清理操作。
处理除法错误
此示例演示了除法运算的基本异常处理。
def safe_divide(a, b):
try:
result = a / b
except ZeroDivisionError:
print("Error: Division by zero")
return None
return result
print(safe_divide(10, 2)) # Output: 5.0
print(safe_divide(5, 0)) # Output: Error: Division by zero, None
try 块尝试除法,而 except 捕获 ZeroDivisionError。当发生无效除法时,该函数返回 None,从而防止程序终止。
捕获多个异常
使用多个 except 子句处理不同的错误类型。
def process_data(value):
try:
num = int(value)
print(100 / num)
except ValueError:
print("Invalid integer conversion")
except ZeroDivisionError:
print("Cannot divide by zero")
process_data("45") # Output: 2.222...
process_data("apple") # Output: Invalid integer conversion
process_data("0") # Output: Cannot divide by zero
单独的 except 块分别处理转换错误和除法错误。 这允许有针对性的错误消息和恢复路径。
使用 Else 子句
仅当 try 块成功时才使用 else 执行代码。
try:
with open("data.txt", "r") as f:
contents = f.read()
except FileNotFoundError:
print("File not found")
else:
print("File read successfully")
print(f"Length: {len(contents)} chars")
只有在 try 块中没有发生异常时,else 块才会运行。 这将错误处理与成功执行逻辑分开。
Finally 用于清理
使用 finally 执行清理代码,无论是否发生异常。
try:
file = open("report.txt", "w")
file.write("Sample data")
100 / 0
except ZeroDivisionError:
print("Division error occurred")
finally:
file.close()
print("File resource closed")
即使在除法错误中断写入操作后,finally 块也能确保文件关闭。 这样可以防止资源泄漏。
引发自定义异常
使用 raise 手动触发无效条件的异常。
def validate_age(age):
if age < 0:
raise ValueError("Age cannot be negative")
return f"Valid age: {age}"
try:
print(validate_age(25))
print(validate_age(-5))
except ValueError as e:
print(f"Error: {e}")
raise 语句为负年龄创建一个 ValueError。 这会传播错误,以便在封闭的 try-except 块中捕获。
嵌套 Try 块
使用嵌套的 try 语句在不同级别处理异常。
try:
try:
result = 10 / 0
except ZeroDivisionError:
print("Inner: Division error")
raise # Re-raise the exception
except Exception as e:
print(f"Outer: Caught {type(e).__name__}")
内部块捕获除法错误并重新引发它以供外部块处理。 这允许分层错误处理和日志记录。
最佳实践
- 避免裸 Except: 捕获特定的异常,而不是使用裸
except: - 使用 Finally: 在
finally中清理文件或网络连接等资源 - 最小 Try 块: 保持
try块尽可能小,以隔离容易出错的代码 - 记录异常: 记录带有回溯的异常以进行调试
- 自定义异常: 为复杂的应用程序创建特定于域的异常
来源
本教程探讨了使用 try-except 块的 Python 异常处理。 这些构造使 Python 应用程序能够实现强大的错误管理和资源清理。
作者
列出所有 Python 教程。