我想捕捉并处理一个特定的异常,我希望所有其他人都被提升。
我想要捕捉的例外情况如下:
Exception("exception want to catch")
我在下面尝试的代码不起作用。在第一个代码中,我希望引发异常;
try:
raise Exception("exception don't want to catch")
except Exception("exception want to catch"):
pass
但我不希望这段代码引发异常:
try:
raise Exception('exception want to catch')
except Exception('exception want to catch'):
pass
答案 0 :(得分:3)
您应该定义(或使用预先存在的)具体异常类,而不是依赖于字符串:
>>> class ExcToCatch(Exception): pass
...
>>> class ExcToNotCatch(Exception): pass
...
>>> try:
... raise ExcToCatch()
... except ExcToCatch:
... pass
...
>>> try:
... raise ExcToNotCatch()
... except ExcToCatch:
... pass
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
__main__.ExcToNotCatch
大概ExcToCatch
和ExcToNotCatch
意味着更有意义的东西,所以应该恰当地命名。
如果你绝对必须依赖字符串,你可以通过str(exception)
获取字符串:
>>> try:
... raise Exception('some string')
... except Exception as e:
... print str(e)
...
some string
您可以在except
块中添加一些逻辑,以便在必要时重新raise
e
(例如,当str(e) != 'exception want to catch'
时)。
答案 1 :(得分:1)
如果此异常派生自BaseException
(看起来它实际上是Exception
的一个实例),您可以检查args
属性。第一个应该是您要处理的字符串:
try:
#stuff
catch Exception as ex:
if ex.args[0] == 'My Exception string':
#do stuff
else:
raise
那就是说,如果你对这个图书馆有任何控制权,请去找作者让他改变它。如果你不这样做,我表示哀悼。