仅当消息匹配时,Python捕获异常

时间:2019-07-12 10:36:16

标签: python exception

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中也没有找到明确的答案。

1 个答案:

答案 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()