name = input('name? ')
if len(name) == 0:
print('error.\n')
raise SystemExit
我在使用python 3.3.2时遇到错误(这可能是学校的版本),但它在其他版本上工作正常,例如2.7.10和3.5
这是错误
答案 0 :(得分:1)
查看屏幕截图,我可以在底部看到Python提示符:
这意味着脚本在交互式会话中运行(我想在Windows上使用IDLE)。我没有找到任何文档,但其他用户发现在交互式会话中提升SystemExit
会打印回溯。
因此,您应该检查并确保您没有在交互式会话中启动脚本。
旧回答:
看起来它是Python 3.3.2中的错误(或特殊性)。根据这个blog post:
如果没有捕获异常,那么python解释器就会捕获 它最后,不打印堆栈跟踪,然后调用exit。
我尝试raise SystemExit('asd')
并且程序刚刚打印asd
,所以看起来确实如此。
升级Python或尝试os._exit(1)
。
答案 1 :(得分:0)
不确定这是否是你想要的,但是如果你想退出使用它:
import sys
name = raw_input('name? ')
if len(name) == 0:
print('error.\n')
sys.exit()
这会通过提升SystemExit退出解释器。
答案 2 :(得分:0)
为什么不使用sys.exit()
?
sys.exit([参数])
退出Python。这是通过引发 SystemExit 异常来实现的,因此可以接受try语句的finally子句指定的清除操作,并且可以拦截外层的退出尝试。
答案 3 :(得分:0)
您可能为excepthook设置了一个处理程序:
https://docs.python.org/3/library/sys.html#sys.excepthook
您应该可以通过执行
重置它 sys.excepthook = sys.__excepthook__
没关系,钩子对BaseException
正常工作,但奇怪的是不适用于SystemExit
(这是BaseException的子类)。
你可能正在用
执行你的程序 python3 -i whatever.py
这给了我与你目睹的相同的行为:
dario@feynman ~> python3 -i /tmp/a.py
Traceback (most recent call last):
File "/tmp/a.py", line 11, in <module>
raise SystemExit()
SystemExit
>>>
请注意最后的>>>
。
只需从正在执行程序的任何内容中删除-i
标志
或者,这是不好的做法,但您也可以使用os._exit(1)