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 教程。