Python:捕获特定异常

发布于 2021-01-29 19:34:23

我想捕获一个特定的ValueError,而不仅仅是任何ValueError。
我试过这样的事情:

try: maquina['WPF'] = macdat(ibus, id, 'WPF')
except: ValueError, 'For STRING = ’WPF’, this machine is not a wind machine.':
    pass

但这会引发SyntaxError:无法分配给文字。
然后我尝试了:

try: maquina['WPF'] = macdat(ibus, id, 'WPF')
except ValueError, e:
    if e != 'For STRING = ’WPF’, this machine is not a wind machine.':
        raise ValueError, e

但这引发了例外,即使这是我要避免的例外。

关注者
0
被浏览
88
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    except ValueError,ee是例外,而不是字符串的实例。因此,当您测试e不等于特定字符串时,该测试始终为False。尝试:

    if str(e) != "..."
    

    代替。

    例:

    def catch(msg):
        try:
            raise ValueError(msg)
        except ValueError as e:  # as e syntax added in ~python2.5
            if str(e) != "foo":
                raise
            else:
                print("caught!")
    
    catch("foo")
    catch("bar")
    

    通常,如果可以帮助您,您并不是真的希望依赖于错误消息-这太脆弱了。如果您可以控制callable macdat,而不是引发ValueErrorin
    macdat,则可以引发自定义异常,该异常继承自ValueError

    class MyValueError(ValueError): pass
    

    然后,您只能捕获MyValueError并让其他ValueErrors继续被其他事物捕获(或不捕获)。Simpleexcept ValueError仍然也会捕获这种类型的异常,因此它在其他代码中的行为应相同,这也可能从此函数捕获ValueErrors。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看