我想到,你可能想要捕获一个异常并做一些事情,只有当被调用的方法引发一些特定的异常,但是如果某个较低的方法引发了同样的异常(因为你只是准备处理顶层)一)。请考虑以下事项:
def a():
raise ValueError('raised by a')
def b():
a()
# Some other processing is done, which raises ValueError
raise ValueError('raised by b')
def c():
try:
b()
except ValueError as e:
print "got the exception"
print e
在这种情况下,c
“知道”b
可能会引发ValueError
并希望对其执行某些操作。但它不知道如何处理ValueError
的其他情况......而且遗憾的是它会抓住它们。
>>> c()
got the exception
raised by a
有办法处理这种情况吗?
也可以批评这种方法;-)也许这不是一个非常干净的方法,试图处理最重要的例外。也许b
应该只引发一个非内置异常......