python 提供了 `sys.exception()` 函数,可在 `except` 块之外直接访问最近一次激活的异常对象
,无需显式传递参数,适用于日志封装、统一错误处理等场景。
在 Python 异常处理中,通常需通过 except Exception as e: 显式捕获异常对象,并将其作为参数传入辅助函数(如日志记录或错误上报函数)。但有时我们希望解耦异常捕获逻辑与处理逻辑——例如将错误处理抽象为独立函数,又不破坏调用链的简洁性。自 Python 3.12 起(注意:该功能实际从 Python 3.12 开始正式引入并稳定支持),sys.exception() 成为标准且安全的方式,用于在 except 块作用域外获取当前活跃的异常对象。
✅ 正确用法示例:
import sys
def other_function():
exc = sys.exception()
if exc is None:
raise RuntimeError("No active exception found")
print(f"Caught {type(exc).__name__}: {exc}")
try:
raise ValueError("Invalid input")
except Exception:
other_function() # 输出:Caught ValueError: Invalid input⚠️ 注意事项:
? 总结:sys.exception() 是现代 Python(≥3.12)中推荐的、语义清晰且线程安全的异常对象获取方式,显著提升了错误处理模块的可复用性与可读性。建议在新项目中优先采用,并配合 if exc is not None 做空值防护。