提问人:onlyvinish 提问时间:9/18/2014 最后编辑:Martijn Pietersonlyvinish 更新时间:4/18/2018 访问量:72071
python sys.exit 在 try [duplicate] 中不起作用
python sys.exit not working in try [duplicate]
问:
Python 2.7.5 (default, Feb 26 2014, 13:43:17)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> try:
... sys.exit()
... except:
... print "in except"
...
in except
>>> try:
... sys.exit(0)
... except:
... print "in except"
...
in except
>>> try:
... sys.exit(1)
... except:
... print "in except"
...
in except
为什么我无法在try中触发sys.exit(),任何建议...!!
此处发布的代码包含所有版本详细信息。
我已经尝试了所有我知道的可能方法来触发它,但我失败了。 它进入“除外”块。
提前致谢..
答:
40赞
tamasgal
9/18/2014
#1
sys.exit()
引发异常,即 。这就是你降落在-block中的原因。SystemExit
except
请参阅此示例:
import sys
try:
sys.exit()
except:
print(sys.exc_info()[0])
这为您提供了:
<type 'exceptions.SystemExit'>
虽然我无法想象一个人有任何实际的理由这样做,但你可以使用这个结构:
import sys
try:
sys.exit() # this always raises SystemExit
except SystemExit:
print("sys.exit() worked as expected")
except:
print("Something went horribly wrong") # some other exception got raised
评论
0赞
onlyvinish
9/18/2014
有什么方法可以在try块中做到这一点。
0赞
tamasgal
9/18/2014
没有理由,因为你试图实现的是引发一个异常并在下一刻“抓住”它。这绝对是无知的;-)try
0赞
onlyvinish
9/18/2014
谢谢伙计..!!如果您对此有任何想法,请更新我。
2赞
glglgl
9/18/2014
@onlyvinish 他已经给了你一个主意!你还错过了什么?
12赞
Mazdak
9/18/2014
#2
基于 Python Wiki :
由于 exit() 最终“仅”引发异常,因此它只会在从主线程调用时退出进程,并且不会拦截异常。
和:
当程序被信号终止时,当检测到 Python 致命内部错误或调用时,不会调用该函数。
exit
os._exit()
因此,如果你在一个块内使用 python 在引发异常后拒绝完成 的功能并执行该块。sys.exit()
try
SystemExit
exits
exception
现在,从编程的角度来看,你基本上不需要把你知道肯定会引起异常的东西放在块中。相反,您可以手动引发 SystemExit
异常,或者如果您不想失去相应的功能,例如将可选参数传递给其构造函数,您可以调用 ,甚至块。try
sys.exit()
sys.exit()
finally
else
except
方法 1(不推荐)
try:
# do stuff
except some_particular_exception:
# handle this exception and then if you want
# do raise SystemExit
else:
# do stuff and/or do raise SystemExit
finally:
# do stuff and/or do raise SystemExit
方法 2(推荐):
try:
# do stuff
except some_particular_exception:
# handle this exception and then if you want
# do sys.exit(stat_code)
else:
# do stuff and/or do sys.exit(stat_code)
finally:
# do stuff and/or do sys.exit(stat_code)
评论
4赞
Martijn Pieters
9/18/2014
不要给自己打电话,只是不要抓住 SystemExit
。打电话意味着什么都没有被清理。os._exit()
os._exit()
评论
except:
except Exception:
SystemExit
os._exit()