Python 调用sys.exit()和引发异常之间的区别
在Python中调用Python 调用sys.exit()和引发异常之间的区别,python,exception-handling,Python,Exception Handling,在Python中调用sys.exit()和抛出异常有什么区别 假设我有一个Python脚本,它执行以下操作: 打开一个文件 读台词 关上它 如果文件不存在或在运行时抛出IOException,下面哪个选项更有意义 没有异常的exception/catch,如果发生异常,它将失败(这是预期的行为) 排除/捕获异常,记录错误消息,自己抛出自定义异常,失败 在除IOException之外的块中,退出时会显示一条错误消息,例如sys.exit(“出错”) 选项3是否会终止进程,而选项1和2则不会?如果P
sys.exit()
和抛出异常有什么区别
假设我有一个Python脚本,它执行以下操作:
IOException
,下面哪个选项更有意义
块中,退出时会显示一条错误消息,例如sys.exit(“出错”)
选项3是否会终止进程,而选项1和2则不会?如果Python没有像Java那样的检查异常,那么处理Python异常的最佳方法是什么(我实际上是Java开发人员^ ^)?
sys.exit
引发一个SystemExit
本身,因此从纯技术角度来看,自己引发该异常与使用sys.exit
没有区别。是的,您可以像捕获任何其他异常一样捕获SystemExit
异常并忽略它
所以,这只是一个更好地记录你的意图的问题
PS:注意,这也意味着
sys.exit
实际上是一个非常糟糕的误称-因为如果在线程中使用sys.exit
,那么只有线程被终止,其他什么都没有。是的,这可能很烦人。有一点细微的区别:
import sys
try:
sys.exit()
except:
print("Caught")
该except
语句捕获异常,而:
import sys
try:
sys.exit()
except Exception:
print("Caught")
无误退出SystemExit
异常(如KeyboardInterrupt
)不是由异常捕获的,而是由异常捕获的
因此,如果调用方捕获了除:
(这是一种不好的做法)之外的所有内容,那么您的系统退出将不会退出,而是将被视为“错误”。这就是为什么异常除外:
最好确保捕获除CTRL+C和系统退出(属于BaseException
类)之外的所有异常