Python跨函数调用traceback.print_exc()无法输出完整栈追踪如何解决
成因
traceback.print_exc() 的底层依赖 sys.exc_info() 获取当前线程的异常上下文,该上下文仅在 except 代码块的作用域内有效:一旦执行流程离开 except 块,Python 就会自动清空异常上下文,sys.exc_info() 会返回 (None, None, None),此时调用 traceback.print_exc() 自然只能输出 NoneType: None。
你当前的代码在 except 块里仅执行了 pass 就退出了异常上下文,之后再调用 function2 时已经没有有效异常信息可以读取。
解决方法
有两种常用方案可以正常输出完整栈追踪:
方案1:在except块内传递异常上下文
在退出 except 块前先保存 sys.exc_info() 的返回值,作为参数传递给下游函数,再用 traceback.print_exception() 打印:
import traceback import sys def function2(exc_info): # 你的其他逻辑 traceback.print_exception(*exc_info) def function1(): try: temp = None temp = int(temp) except: # 提前保存异常上下文 current_exc = sys.exc_info() function2(current_exc) function1()
方案2:直接在except块内调用function2
只要执行流程还在 except 作用域内,异常上下文就不会被清空,此时不需要做额外传参,traceback.print_exc() 也能正常工作:
import traceback def function2(): # 你的其他逻辑 traceback.print_exc() def function1(): try: temp = None temp = int(temp) except: # 未退出except块时直接调用 function2() function1()
内容的提问来源于stack exchange,提问作者Moder New
相关产品推荐
相关产品推荐

