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有很多-通常有一个离您的用例足够近,可以使用。