Подтвердить что ты не робот

Не удается получить доступ к Queue.Empty: "Объект AttributeError:" function "не имеет атрибута" Пусто "

По какой-то причине я не могу получить доступ к исключению Queue.Empty - что я здесь делаю неправильно?

from multiprocessing import Process, Queue

# ...

try:
    action = action_queue.get(False)
    print "Action: " + action
except Queue.Empty:
    pass

Трассировка стека:

Traceback (most recent call last):  
File "C:\Program Files\Python27\lib\multiprocessing\process.py", line 258,
  in _bootstrap
  self.run()
File "C:\Program Files\Python27\lib\multiprocessing\process.py", line 114,
  in run
  self._target(*self._args, **self._kwargs)
File "D:\Development\populate.py", line 39, in permutate
  except Queue.Empty: AttributeError: 'function' object has no attribute 'Empty'
4b9b3361

Ответ 1

Исключение Queue.Empty находится в модуле Queue, а не в классе multiprocessing.queues.Queue. Модуль многопроцессорности фактически использует класс Queue (module) Empty exception:

from multiprocessing import Queue
from Queue import Empty
q = Queue()
try:
    q.get( False )
except Empty:
    print "Queue was empty"

Если вы хотите быть очень явным и подробным, вы можете сделать это:

import multiprocessing
import Queue
q = multiprocessing.Queue()
try:
    q.get( False )
execpt Queue.Empty:
    print "Queue was empty"

Преимущество прежнего подхода, вероятно, является лучшей идеей, потому что есть только один объект Queue, о котором нужно беспокоиться, и вам не нужно задаваться вопросом, работаете ли вы с классом или модулем, как в моем втором примере.