为什么我不能从多处理队列中捕获Queue.Empty异常?

时间:2012-12-18 21:10:22

标签: python exception-handling python-2.7

我正在尝试捕获在multiprocessing.Queue为空时引发的Queue.Empty异常。以下不起作用:

import multiprocessing
f = multiprocessing.Queue()
try:
      f.get(True,0.1)
except Queue.Empty:
      print 'foo'

这给了我一个名称错误:NameError:名称'Queue'未定义

用多处理替换Queue.Empty.Queue.Empty也没有帮助。在这种情况下,它给了我一个“AttributeError:'function'对象没有属性'Empty'”异常。

2 个答案:

答案 0 :(得分:32)

Empty模块中无法直接找到您要查找的multiprocessing异常,因为multiprocessingQueue模块借用了它(重命名为{{1}在Python 3)中。要使代码正常工作,只需在顶部执行queue

试试这个:

import Queue

答案 1 :(得分:4)

Blckknght在2012年的回答仍然是正确的,但是使用Python 3.7.1时,我发现必须使用queue.Empty作为要捕获的异常的名称(请注意,“ queue”中的小写字母“ q”)。

所以,回顾一下:

import queue

# Create a queue
queuevarname = queue.Queue(5) # size of queue is unimportant

while some_condition_is_true:
    try:
        # attempt to read queue in a way that the exception could be thrown
        queuedObject = queuevarname.get(False)

        ...
    except queue.Empty:
        # Do whatever you want here, e.g. pass so
        # your loop can continue, or exit the program, or...