如何在Python中导入和捕获特定于模块的异常?

Ahura

Python模块通常具有自己的异常。我经常发现自己想要导入这些异常以能够正确地捕获它们(正确的做法不只是抱抱Exception希望。)

不过,我经常发现自己花时间准确地找出其中一个模块中的异常的位置,或者如果他们从另一个模块,等我进口很好奇,如果有发现了这一点,一般的方式,即给定的SomeModulespecificException就是有一个简单的方法来弄清楚如何导入它?

这是来自多处理模块的示例:

import multiprocessing
q = multiprocessing.Queue()
q.get_nowait()

上面的代码引发一个Empty异常。在这种情况下,我从此答案中发现异常是从Queue模块导入的,因此在这种特定情况下,您需要from Queue import Empty导入异常。

在一般情况下,有没有简单的方法可以解决此问题?

威姆

这是我通常的做法:

>>> import multiprocessing
... q = multiprocessing.Queue()
... q.get_nowait()
... 
... 
---------------------------------------------------------------------------
Empty                                     Traceback (most recent call last)
<...snip...>
>>> import sys
>>> err = sys.last_value
>>> err.__module__
'queue'
>>> from queue import Empty
>>> isinstance(err, Empty)
True

在通用情况下,没有万无一失的方法适用于所有模块,因为它们通常并不了解(或关心)其所有依赖项异常层次结构。第三方代码中的异常只会使堆栈膨胀,除非有实际行动来处理并继续执行,否则通常没有任何意义要捕获它。好的项目通常会在其API指南中清楚地记录异常层次结构。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章