我正在尝试捕获在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'”异常。
答案 0 :(得分:32)
Empty
模块中无法直接找到您要查找的multiprocessing
异常,因为multiprocessing
从Queue
模块借用了它(重命名为{{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...