为什么 sys.exit() 导致回溯?
Why is sys.exit() causing a traceback?
根据 How to exit from Python without traceback?,在 Python 脚本中调用 sys.exit()
应该在没有回溯的情况下静默退出。
import sys
sys.exit(0)
但是,当我在 Windows 7 上使用 python -i "exit.py"
从命令行启动我的脚本时,(显示 or from Notepad++), a traceback for a 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)
因为在后台,sys.exit(0)
引发了一个 SystemExit
异常。
进一步阅读here
你想要的是:
os._exit(1)
因为您使用的是 -i 选项。没有它就试试吧,你不会得到堆栈跟踪。
$ python ptest.py
$ python -i ptest.py
Traceback (most recent call last):
File "ptest.py", line 3, in <module>
sys.exit(0)
SystemExit: 0
您是 运行 Python 的 -i
旗帜。 -i
suppresses the usual special handling of the SystemExit
exception sys.exit
raises;由于特殊处理被抑制,Python 执行正常的异常处理,打印回溯。
可以说,-i
应该只抑制特殊处理的 "exit" 部分,而不会导致打印回溯。你可以提出 bug report;我没有看到任何现有的相关报告。
未显示异常:
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])
Exit the interpreter by raising SystemExit(status).
, sys.exit(0)
与加注 SystemExit()
完全一样, 可以在更高的水平上捕获, 在您的情况下发生是因为您使用 -i
.
如果你想退出而不回溯,有os._exit(0)
调用一个"C function"并立即退出,即使在-i
模式
正如@user2357112 告诉我的那样,os._exit(0)
是一个激进的举动,不做任何清理就退出了。最后没有,__exit__
、atexit
、__del__
等
根据 How to exit from Python without traceback?,在 Python 脚本中调用 sys.exit()
应该在没有回溯的情况下静默退出。
import sys
sys.exit(0)
但是,当我在 Windows 7 上使用 python -i "exit.py"
从命令行启动我的脚本时,(显示 or from Notepad++), a traceback for a 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)
因为在后台,sys.exit(0)
引发了一个 SystemExit
异常。
进一步阅读here
你想要的是:
os._exit(1)
因为您使用的是 -i 选项。没有它就试试吧,你不会得到堆栈跟踪。
$ python ptest.py
$ python -i ptest.py
Traceback (most recent call last):
File "ptest.py", line 3, in <module>
sys.exit(0)
SystemExit: 0
您是 运行 Python 的 -i
旗帜。 -i
suppresses the usual special handling of the SystemExit
exception sys.exit
raises;由于特殊处理被抑制,Python 执行正常的异常处理,打印回溯。
可以说,-i
应该只抑制特殊处理的 "exit" 部分,而不会导致打印回溯。你可以提出 bug report;我没有看到任何现有的相关报告。
未显示异常:
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])
Exit the interpreter by raising SystemExit(status).
sys.exit(0)
与加注 SystemExit()
完全一样, 可以在更高的水平上捕获, 在您的情况下发生是因为您使用 -i
.
如果你想退出而不回溯,有os._exit(0)
调用一个"C function"并立即退出,即使在-i
模式
正如@user2357112 告诉我的那样,os._exit(0)
是一个激进的举动,不做任何清理就退出了。最后没有,__exit__
、atexit
、__del__
等