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

2024-04-26 00:21:39 发布

您现在位置:Python中文网/ 问答频道 /正文

Python模块通常有自己的异常。我经常发现自己想要导入这些异常以便能够正确地捕获它们(不只是在cacthingException中,而是希望得到最好的结果)。你知道吗

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

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

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

上面的代码引发了Empty异常。在本例中,我从this answer发现异常是从Queue模块导入的,因此在这个特定的例子中,您需要from Queue import Empty来导入异常。你知道吗

在一般情况下,有没有一个简单的方法来解决这个问题?你知道吗


Tags: 模块方法代码import示例getqueue时间
1条回答
网友
1楼 · 发布于 2024-04-26 00:21:39

我通常是这样做的:

>>> 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指南中清楚地记录异常层次结构。你知道吗

相关问题 更多 >