Python:如何捕获和处理用户定义的异常?

时间:2014-05-21 13:43:41

标签: python exception exception-handling

我想捕捉并处理一个特定的异常,我希望所有其他人都被提升。

我想要捕捉的例外情况如下:

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

2 个答案:

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

大概ExcToCatchExcToNotCatch意味着更有意义的东西,所以应该恰当地命名。


如果你绝对必须依赖字符串,你可以通过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

那就是说,如果你对这个图书馆有任何控制权,请去找作者让他改变它。如果你不这样做,我表示哀悼。