Python:捕获特定异常
我想捕获一个特定的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
但这引发了例外,即使这是我要避免的例外。
-
在
except ValueError,e
,e
是例外,而不是字符串的实例。因此,当您测试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
,而不是引发ValueError
in
macdat
,则可以引发自定义异常,该异常继承自ValueError
:class MyValueError(ValueError): pass
然后,您只能捕获
MyValueError
并让其他ValueError
s继续被其他事物捕获(或不捕获)。Simpleexcept ValueError
仍然也会捕获这种类型的异常,因此它在其他代码中的行为应相同,这也可能从此函数捕获ValueErrors。