Why does exit(0) in TRY loop result in an exception being thrown?
考虑下面的例子:
1 2 3 4 5 6
| try:
print"Try this."
exit(0)
except:
print"Failed."
exit(1) |
在这个简单的例子是执行,以下是印制到stdout。
原谅我,如果有一个明显的答案,如果这一要求已经发生或不发了,但exit(0)(这应该给我净出口)掷异常?
我想用try: except:环在一个现有的用例和脚本,脚本将被发现,(1)说,甚至当try条件对exit(0).
所以我想exit(0)抛(n是隐藏的?)某些异常的排序,但为什么呢?它不是显示的数据(如当按Ctrl + C是用来产生异常的结果,keyboardinterrupt)和意外的行为,如在我结婚时,我expecting端跟踪返回0和1的回报。
一个异常(或异常)的唯一的方式来退出Python脚本?
- 如果你只搜索python exit,就会显示很多关于这个的信息。
- @用户2357112对不起,我想我今天瞎了。标记为重复。谢谢。
此处引发的异常是SystemExit异常。因此,如果您尝试:
1 2 3 4 5 6 7 8
| try:
print"Try this."
exit(0)
except SystemExit:
pass
except:
print"Failed."
exit(1) |
输出为:
号
为防止出现这种情况,您可以调用os._exit()直接退出,而不引发异常:
1 2 3 4 5 6 7 8 9
| import os
try:
print"Try this."
os._exit(0)
except SystemExit:
pass
except:
print"Failed."
os._exit(1) |
报价用户2357112:
os._exit跳过最后一个块、上下文管理器__exit__、出口处理程序和其他重要的清理,因此除了一些非常具体的情况(我相信大多数情况都涉及fork),使用它不是一个好主意。
- except not SystemExit并不像你想象的那样做。
- 好的,请帮帮我。我的意思是不要测试那个例外…
- 没有办法指定"除此之外的所有例外"。你能得到的最接近的是用except BaseException as e捕获所有异常,然后用if isinstance(e, SystemExit): raise取消捕获你不想要的异常(没有raise的参数)。
- 我的编辑版本怎么样?
- os._exit跳过最后一个块、上下文管理器__exit__、出口处理程序和其他重要的清理,因此除了一些非常具体的情况(我相信其中大多数涉及fork),使用它不是一个好主意。另外,您的第一个代码片段仍然尝试执行except not SystemExit。
- @用户2357112抱歉,已保存。关于"exit()"函数,op说他需要一个方法来防止异常被引发。不过,我想我会在回答中提到它的危害。