在 Spyder 5 中按 sys.exit() 停止后如何在 Python 代码中显示位置

How to display position in Python code after stopping by sys.exit() in Spyder 5

为了在定义的位置中断代码,我在代码中放置了命令 sys.exit()

程序停止但不return停止位置。无论是在控制台还是在代码 window 中,我都看到程序在哪一点停止了。由于我有几个停止命令,我不知道程序在哪里退出,我完全迷失在代码中。

这是一个错误吗?如何以编程方式停止带有位置输出的代码?最快的方法是什么?

我使用 Spyder 5.1.5 和 Spyder 5.2 与 WinPython 3.9.5.0,程序在 Win10Pro 21H1 版本上无需安装即可使用。

sys.exit() 没有任何参数只是在没有任何进一步信息的情况下终止执行。

如果您需要查看调用的 sys.exit 行,您有多种选择。这里有 2 个简单的解决方案。

1°) 简单的方法

sys.exit()接受一个参数。当你传递一个字符串时,这个字符串将在退出时打印出来。您可以利用它来跟踪 使用了退出点。

示例:

if True:
  sys.exit("exit point 1")
else:
  sys.exit("exit point 2")

执行时会打印以下内容:

exit point 1

这非常简单,但需要完整传递您的代码才能更改所有 sys.exit 调用。幸运的是,有一个侵入性较小的选项。

2°) 使用 SystemExit 例外

sys.exit(),最终引发 SystemExit 异常。与其他所有异常一样,它可以被捕获,因此您可以使用 traceback 模块打印调用堆栈。

你所要做的就是用 try: except SystemExit: 包围你的主程序来拦截 sys.exit() 调用并打印调用堆栈。

这是一个简单的例子: 导入系统 导入回溯

def test():
  print ("entering test")
  sys.exit()
  print ("leaving test")

try:
  test()
  sys.exit()
except SystemExit as e:
  traceback.print_exc()
  raise e

这个程序的输出将是:

entering test
Traceback (most recent call last):
  File "test.py", line 10, in <module>
    test()
  File "test.py", line 6, in test
    sys.exit()
  SystemExit

所以你可以看到你通过文件test.py

的第6行退出了

python 标准库文档中详细记录了该行为: https://docs.python.org/3/library/sys.html(章节sys.exit)