Python: Queue.Empty Exception Handling

После короткой дискуссии с кем-то об обработке исключений в Python, вызванной обработкой объекта очереди, я подумал, что я его выброшу ...

METHOD 1:
import Queue

q = Queue.Queue()

try:
    task=q.get(False)
    #Opt 1: Handle task here and call q.task_done()
except Queue.Empty:
    #Handle empty queue here
    pass

#Opt2: Handle task here and call q.task_done()
METHOD 2:
import Queue

q = Queue.Queue()

if q.empty():
    #Handle empty queue here
else:
    task = q.get()
    #Handle task here
    q.task_done()

Один из аргументов заключается в том, что метод 1 неверен, поскольку пустая очередь не является ошибкой и поэтому не должна обрабатываться с использованием исключения Queue.Empty. Кроме того, это может усложнить отладку при кодировании таким образом, если учесть, что часть обработки задач может быть потенциально большой.

Другой аргумент заключается в том, что любой из этих способов приемлем в Python, и что обработка задачи за пределами try / кроме может помочь в отладке, если обработка задачи велика, хотя было решено, что это может выглядеть уродливее, чем при использовании метода 2.

Мнения?

ОБНОВЛЕНИЕ: немного больше информации после того, как ответ 1 прошел .... Дискуссия началась после того, как метод 1 использовался в многопоточном коде. В этом случае код получит блокировку (из объекта threading.Lock) и освободит ее либо после того, как будет возвращено задание, либо будет выдан Queue.Empty.

ОБНОВЛЕНИЕ 2: нам обоим было неизвестно, что объект очереди был потокобезопасным. Похоже, попробуйте / кроме это путь!

Ответы на вопрос(3)

Ваш ответ на вопрос