Python 3.3.2不允许我使用'raise SystemExit'

时间:2015-10-09 10:46:59

标签: python exception python-3.3

name = input('name? ')
if len(name) == 0:
    print('error.\n')                            
    raise SystemExit

我在使用python 3.3.2时遇到错误(这可能是学校的版本),但它在其他版本上工作正常,例如2.7.10和3.5

这是错误

This is the image of the error.

4 个答案:

答案 0 :(得分:1)

查看屏幕截图,我可以在底部看到Python提示符:

enter image description here

这意味着脚本在交互式会话中运行(我想在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)