我想以某种方式处理特定的异常,并且通常记录所有其他异常。 这就是我所拥有的:
class MyCustomException(Exception): pass
try:
something()
except MyCustomException:
something_custom()
except Exception as e:
#all others
logging.error("{}".format(e))
问题是即使MyCustomException
也会被记录,因为它继承自Exception
。我该怎么做才能避免这种情况?
答案 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