根据 How to exit from Python without traceback? ,在Python脚本中调用sys.exit()
应该在没有回溯的情况下静默退出。
import sys
sys.exit(0)
但是,当我使用python -i "exit.py"
(or from Notepad++)从Windows 7的命令行启动脚本时,会显示SystemExit
异常的回溯。
U:\>python -i "exit.py"
Traceback (most recent call last):
File "exit.py", line 2, in <module>
sys.exit(0)
SystemExit: 0
>>>
为什么sys.exit()
在从Windows命令行运行时显示回溯?
(供参考,我在Windows 7上使用Python 3.6.4)
答案 0 :(得分:7)
您正在使用-i
标志运行Python。 -i
suppresses the usual special handling of the SystemExit
exception sys.exit
raises;由于特殊处理被抑制,Python执行正常的异常处理,打印回溯。
可以说,-i
应该只能抑制&#34;退出&#34;部分特殊处理,不会导致回溯打印。你可以举bug report;我没有看到任何现有的相关报道。
答案 1 :(得分:4)
没有例外:
python exit.py
并且您的程序已终止。
使用-i
选项运行交互式(在运行脚本后以交互方式检查)并显示异常:
python -i exit.py
Traceback (most recent call last):
File "exit.py", line 2, in <module>
sys.exit(0)
SystemExit: 0
>>>
因为解释器一直在运行。
exit([status])
通过提升SystemExit(状态)退出解释器。
答案 2 :(得分:1)
答案 3 :(得分:0)
因为您使用的是-i选项。没有它就试试吧,你不会得到堆栈跟踪。
closeModal
答案 4 :(得分:0)
As Matt_G says,sys.exit(0)
与提升SystemExit()
完全相同,可以在更高级别捕获,在您使用-i
时会发生这种情况。
如果你想退出而没有追溯,有os._exit(0)
调用&#34; C函数&#34;并立即退出-i
模式
正如@ user2357112告诉我的那样,os._exit(0)
是一个没有任何清理就会退出的激烈举动。最后,__exit__
,atexit
,__del__
等