调用sys.exit(),并引发异常的区别

问题描述 投票:8回答:2

什么叫sys.exit()和Python中抛出异常的区别?

比方说,我有一个Python脚本,执行以下操作:

  1. 打开一个文件
  2. 读线
  3. 关闭

如果该文件不存在或IOException都在运行时抛出,该选项下面更有意义?

  1. 除了无/捕获的异常,如果发生异常,它失败了(这是预期的行为无论如何)
  2. 除/捕获异常,记录错误消息,抛出由自己定制的例外,失败了。
  3. except IOException块,出口与例如错误消息sys.exit("something is wrong")

是否选择3杀死进程,而1和2不?什么是处理给出了Python异常的最好方法是Python没有检查异常,如Java(我真的是一个Java开发人员^ _ ^)?

python exception-handling
2个回答
14
投票

sys.exit提出了SystemExit本身所以从纯技术角度有自己养的是异常或使用sys.exit之间没有什么区别。是的,你可以赶上SystemExit异常像任何其他异常,忽略它。

所以它只是一个记录你的意图更好的事情。

PS:请注意,这也意味着sys.exit实际上是一个非常糟糕的用词不当 - 因为如果你在一个线程中使用sys.exit只有线程终止而已。这可以是非常恼人的,是的。


3
投票

有一个小的,细微的差别:

import sys

try:
    sys.exit()
except:
    print("Caught")

except声明而捕捉异常:

进口SYS

try:
    sys.exit()
except Exception:
    print("Caught")

退出没有错误。 SystemExit除外(例如KeyboardInterrupt)不受except Exception抓住了,但单独由except抓获。

因此,如果调用者捕捉与except:一切(这是不好的做法),您sys.exit不会退出,但会被认为是一个“错误”(这就是为什么except Exception:是更好地一定要赶除CTRL + C和系统退出所有异常(这是BaseException类的)。

© www.soinside.com 2019 - 2024. All rights reserved.