在 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)
为了在定义的位置中断代码,我在代码中放置了命令 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)