调用sys.exit()
和在Python中抛出异常有什么区别?
假设我有一个Python脚本,它执行以下操作:
如果文件不存在或者在运行时抛出IOException
,下面哪个选项更有意义?
except IOException
块中,退出并显示错误消息,例如sys.exit("something is wrong")
选项3是否会终止进程,而1和2则不会?考虑到Python没有像Java那样的检查异常(我真的是Java开发人员^ _ ^),处理Python异常的最佳方法是什么?
答案 0 :(得分:14)
sys.exit
提出SystemExit
本身,因此从纯粹的技术角度来看,自己提出异常或使用sys.exit
之间没有区别。是的,您可以像其他任何异常一样捕获SystemExit
个异常并忽略它。
所以这只是更好地记录你的意图的问题。
PS:请注意,这也意味着sys.exit
实际上是一个非常糟糕的用词 - 因为如果你在一个线程中使用sys.exit
,那么线程就会被终止而没有别的。这可能很烦人,是的。
答案 1 :(得分:2)
有一个小的,微妙的区别:
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
类)之外的所有异常。