我想捕捉特定的 ValueError
,而不仅仅是任何 ValueError
。
我尝试过这样的事情:
try: maquina['WPF'] = macdat(ibus, id, 'WPF')
except: ValueError, 'For STRING = ’WPF’, this machine is not a wind machine.':
pass
但它会引发 SyntaxError: can't assign to literal.
然后我尝试了:
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")
通常情况下,如果可以提供帮助,您并不想依赖错误消息——它有点太脆弱了。如果您可以控制可调用的 macdat
,而不是在 macdat
中引发 ValueError
,您可以引发从 继承的自定义异常值错误
:
class MyValueError(ValueError): pass
那么你只能捕获 MyValueError
并让其他 ValueError
继续被其他东西(或不被其他东西)捕获。简单的 except ValueError
仍然会捕获这种类型的异常,因此它在其他可能也从该函数捕获 ValueErrors 的代码中的行为应该相同。
关于Python:捕获特定异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13531247/