Spyder 5中使用sys.exit()停止Python代码后如何显示执行位置
问题解答
1. 该现象不是软件Bug
sys.exit()的本质是触发Python内置的SystemExit异常,Spyder默认不会对该异常打印回溯栈信息,因此不会展示代码退出的具体位置,属于设计层面的预期行为,和你当前使用的Spyder、WinPython版本无关。
2. 最快实现方案
无需修改原有sys.exit()调用,只需在你代码的最开头加入如下代码段即可,所有主动退出的位置都会自动打印到控制台,该方案在你使用的Spyder 5.x、WinPython 3.9版本环境下完全兼容,无需额外配置:
import sys import inspect # 覆写默认的sys.exit方法,新增位置打印逻辑 original_exit = sys.exit def exit_with_location(code=0): # 获取调用sys.exit的上层栈帧 call_frame = inspect.currentframe().f_back print(f"程序退出位置:文件 {call_frame.f_code.co_filename},第 {call_frame.f_lineno} 行,所在函数 {call_frame.f_code.co_name}") original_exit(code) sys.exit = exit_with_location
3. 复杂场景补充方案
如果需要排查多层调用的场景,需要完整调用栈信息,可以将上述方法替换为调用traceback模块打印全栈:
import sys import traceback original_exit = sys.exit def exit_with_full_stack(code=0): print("程序退出,完整调用栈如下:") traceback.print_stack() original_exit(code) sys.exit = exit_with_full_stack
内容的提问来源于stack exchange,提问作者granular_bastard
相关产品推荐
相关产品推荐

