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

Python:如何捕获和处理用户定义的异常?,python,exception,exception-handling,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")
我在下面尝试的代码无效。在第一个代码中,我希望引发异常

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
您应该定义(或使用预先存在的)具体异常类,而不是依赖字符串:

>>> 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
您可以在
块中包含一些逻辑,但
块除外,以便在必要时(例如,当
str(e)!=“exception want catch”
)重新生成

您应该定义(或使用预先存在的)具体异常类,而不是依赖字符串:

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

您可以在
块中包含一些逻辑,但
块除外,以便在必要时重新启动
e
(例如,当
str(e)!=“exception want catch”
)。

如果此异常源于
BaseException
(看起来它实际上是
异常的一个实例)您可以检查
args
属性。第一个应该是要处理的字符串:

try:
  #stuff
catch Exception as ex:
  if ex.args[0] == 'My Exception string':
    #do stuff
  else:
    raise

也就是说,如果你对这个库有任何控制权,请去找作者让他更改它。如果您没有,我表示哀悼。

如果此异常源于
BaseException
(看起来它实际上是
exception
的一个实例),您可以检查
args
属性。第一个应该是要处理的字符串:

try:
  #stuff
catch Exception as ex:
  if ex.args[0] == 'My Exception string':
    #do stuff
  else:
    raise

也就是说,如果你对这个库有任何控制权,请去找作者让他更改它。如果您不这样做,我表示哀悼。

听起来这可能是我的XY问题-否则您只需要提供更多详细信息,说明您实际尝试如何处理此问题。我建议您创建自己的异常派生类,并创建一个exception for并传递它。不同类型的错误(例如,
ValueError
TypeError
)或具有不同消息的同一类型错误?您是否也编写了引发错误的代码?好的,但这不是我的代码。我使用的模块会引发异常('like this'))。听起来这对我来说可能是一个XY问题-否则你只需要给出更多的细节,说明你实际上是如何处理这个问题的。我建议你创建自己的异常派生类,并对其进行exception并传递它。不同类型的错误(例如
ValueError
TypeError
)或者同一类型的错误有不同的消息?您是否也编写了引发错误的代码?好的,但这不是我的代码。我使用的模块会引发异常('like this'))。这正是我想要的结果。但是,如果不创建异常类,就没有办法做到这一点吗?@Willbauchamp有很多-通常有一个非常接近您的用例可以使用。这正是我想要的结果。但是,如果不创建异常类,就没有办法做到这一点吗?@Willbauchamp有很多-通常有一个离您的用例足够近,可以使用。