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

如何在Python中导入和捕获特定于模块的异常?,python,exception,Python,Exception,Python模块通常有自己的异常。我经常发现自己想要导入这些异常,以便能够正确地捕获它们(正确地说,不仅仅是cacthingException并希望得到最好的结果) 然而,我经常发现自己花时间去弄清楚异常在一个模块中的确切位置,或者它们是否是从另一个模块导入的,等等。我很好奇是否有一种通用的方法来找出这个问题,即给定somemodulespecificeexception有没有一种简单的方法来弄清楚如何导入它 以下是多处理模块的一个示例: import multiprocessing q = m

Python模块通常有自己的异常。我经常发现自己想要导入这些异常,以便能够正确地捕获它们(正确地说,不仅仅是cacthing
Exception
并希望得到最好的结果)

然而,我经常发现自己花时间去弄清楚异常在一个模块中的确切位置,或者它们是否是从另一个模块导入的,等等。我很好奇是否有一种通用的方法来找出这个问题,即给定
somemodulespecificeexception
有没有一种简单的方法来弄清楚如何导入它

以下是多处理模块的一个示例:

import multiprocessing
q = multiprocessing.Queue()
q.get_nowait()
上述代码引发了一个
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
导入多处理 ... q=多处理。队列() ... q、 获取_nowait() ... ... --------------------------------------------------------------------------- 空回溯(最后一次最近调用) >>>导入系统 >>>err=sys.last_值 >>>错误模块__ “队列” >>>从队列导入空 >>>isinstance(错误,空) 真的
在一般情况下,没有一种简单的方法适用于所有模块,因为它们通常不知道(或不关心)它们的所有依赖项异常层次结构。第三方代码中的异常只会在堆栈中冒泡,通常没有必要捕获它,除非您能够实际做一些事情来处理它并继续。好的项目通常会在其API指南中清楚地记录异常层次结构。

我通常在开发时将异常捕获为e,然后打印(键入(e))以查看我应该捕获的内容。这是否回答了您的问题@乔治:不,不是真的。这里的问题不是一般的异常捕获,但是,考虑到模块X抛出的异常和特定于该模块的错误,如何确定从X导入给定异常的位置。