关于python 2.7:为什么TRY循环中的exit(0)会导致抛出异常?

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。

1
2
Try this.
Failed.

原谅我,如果有一个明显的答案,如果这一要求已经发生或不发了,但exit(0)(这应该给我净出口)掷异常?

我想用try: except:环在一个现有的用例和脚本,脚本将被发现,(1)说,甚至当try条件对exit(0).

所以我想exit(0)抛(n是隐藏的?)某些异常的排序,但为什么呢?它不是显示的数据(如当按Ctrl + C是用来产生异常的结果,keyboardinterrupt)和意外的行为,如在我结婚时,我expecting端跟踪返回0和1的回报。

一个异常(或异常)的唯一的方式来退出Python脚本?


此处引发的异常是SystemExit异常。因此,如果您尝试:

1
2
3
4
5
6
7
8
try:
     print"Try this."
     exit(0)
except SystemExit:
     pass
except:
     print"Failed."
     exit(1)

输出为:

1
Try this.

为防止出现这种情况,您可以调用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),使用它不是一个好主意。