我编写了如下代码:
try:
do_somethong
except TimedOutException as e:
logger.exception(e)
except Exception as e:
logger.exception(e)
与以下代码相同吗?
try:
do_somethong
except (TimedOutException, Exception) as e:
logger.exception(e)
我知道TimedOutException
是Exception
的子类,我应该删除TimedOutException
吗?有人可以帮我解释一下吗?提前谢谢!
答案 0 :(得分:1)
警告: except Exception as e:
不应该被使用,因为它会对来自它的每个异常进行分组(大多数异常都从Exception
继承,除非对于一些与python相关的事情)
如果仍然想要使用Exception,则不需要TimedOutException。
处理异常时,处理except子句中使用的类的实例或其中的任何子类的每个异常,因此Exception
基本上处理99%的异常。这就是为什么不建议将Exception
作为此purpouse的类的原因,除非您只是使用raise
再次记录并引发相同的异常。
当使用多个except子句时,顺序很重要,因为任何异常只能由匹配该类型的第一个except子句处理。
答案 1 :(得分:1)
如果要应用不同的处理,则使用多个except
块:
try:
do_somethong
except TimedOutException as e:
# special processing for timeout
logger.exception(e)
except Exception as e:
# different processing for all other exception
logger.exception(e)
exit(1) # say it is fatal for example...
如果在同一个块中应用相同的处理组所有异常,并且不添加已存在的类的异常子类。