python处理多个异常

时间:2016-11-23 10:25:03

标签: python exception-handling

我编写了如下代码:

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)

我知道TimedOutExceptionException的子类,我应该删除TimedOutException吗?有人可以帮我解释一下吗?提前谢谢!

2 个答案:

答案 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...

如果在同一个块中应用相同的处理组所有异常,并且不添加已存在的类的异常子类。