tl;博士
如何捕获具有相同类型但消息不同的不同异常?
情况
在理想情况下,我将处理如下异常:
try:
do_something()
except ExceptionOne:
handle_exception_one()
except ExceptionTwo:
handle_exception_two()
except Exception as e:
print("Other exception: {}".format(e))
但是在我的用法中,我使用的外部代码可能会引发两个异常。两者都是ValueError
,但是有不同的消息。我想区别对待它们。这是我尝试采用的方法(为了更容易地表达我的想法,我提出了AssertionError
):
try:
assert 1 == 2, 'test'
except AssertionError('test'):
print("one")
except AssertionError('AssertionError: test'):
print("two")
except Exception as e:
print("Other exception: {}".format(e))
但是这段代码总是到最后一个print()
并给我
Other exception: test
有没有办法这样捕获异常?我以为这是可能的,因为Python允许我在捕获异常ExceptionType('MESSAGE')
时指定MESSAGE,但实际上我没有设法使其正常工作。在docs中也没有找到明确的答案。
答案 0 :(得分:3)
我会选择这样的东西:
try:
do_the_thing()
except AssertionError as ae:
if "message A" in ae.value:
process_exception_for_message_A()
elif "message B" in ae.value:
process_exception_for_message_B()
else:
default_exception_precessing()