Python处理多个异常

时间:2014-11-05 14:36:59

标签: python exception-handling

我想以某种方式处理特定的异常,并且通常记录所有其他异常。 这就是我所拥有的:

class MyCustomException(Exception): pass


try:
    something()
except MyCustomException:
    something_custom()
except Exception as e:
    #all others
    logging.error("{}".format(e))

问题是即使MyCustomException也会被记录,因为它继承自Exception。我该怎么做才能避免这种情况?

2 个答案:

答案 0 :(得分:8)

您的代码还发生了什么?

在流程到达第二个MyCustomException子句之前,应检查并处理

except

In [1]: def test():
   ...:     try:
   ...:         raise ValueError()
   ...:     except ValueError:
   ...:         print('valueerror')
   ...:     except Exception:
   ...:         print('exception')
   ...:         

In [2]: test()
valueerror

In [3]: issubclass(ValueError,Exception)
Out[3]: True

答案 1 :(得分:6)

只会执行第一个匹配的除了块:

class X(Exception): pass

try:
    raise X
except X:
    print 1
except Exception:
    print 2

仅打印1。

即使你在一个except块中引发一个异常,除了block:

之外,它不会被另一个异常捕获
class X(Exception): pass

try:
    raise X
except X:
    print 1
    0/0
except Exception:
    print 2

打印1并引发ZeroDivisionError: integer division or modulo by zero