调用sys.exit()和在Python中抛出异常有什么区别?
假设我有一个Python脚本,它执行以下操作:
如果文件不存在,或者在运行时抛出一个IOException,那么下面哪个选项更有意义?
除了/捕获异常,如果发生异常,它将失败(这是预期的行为anyway)
选项3会终止进程,而1和2不会吗?考虑到Python没有像Java这样的检查异常(我真的是一个Java ^_^),那么处理Python异常的最好方法是什么?
发布于 2012-05-29 10:02:10
sys.exit会引发SystemExit本身,所以从纯粹的技术角度来看,自己引发异常还是使用sys.exit没有什么区别。是的,您可以像任何其他异常一样捕获SystemExit异常并忽略它。
所以这只是一个更好地记录你的意图的问题。
PS:请注意,这也意味着sys.exit实际上是一个非常糟糕的用词错误--因为如果在线程中使用sys.exit,则只终止线程,而没有其他任何东西。会很烦人的,是的。
发布于 2018-02-01 20:40:59
有一个细微的差别:
import sys
try:
sys.exit()
except:
print("Caught")该except语句捕获异常,而:
import sys
try:
sys.exit()
except Exception:
print("Caught")没有错误退出。SystemExit异常(如KeyboardInterrupt)不是由except Exception捕获的,而是由except单独捕获的。
因此,如果调用方用except:捕获所有内容(这是错误的做法),则sys.exit不会退出,而是会被视为“错误”。这就是为什么except Exception:最好确保捕获除CTRL+C和system (属于BaseException类)之外的所有异常。
https://stackoverflow.com/questions/10796821
复制相似问题