Python: Tratamento de Exceção de Queue.Empty

Depois de um curto debate com alguém sobre manipulação de exceções em Python - desencadeada pelo manuseio de um objeto de fila - pensei em jogá-lo lá fora ...

MÉTODO 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()
MÉTODO 2:
import Queue

q = Queue.Queue()

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

Um argumento é que o Método 1 está errado porque a fila está vazia não é um erro e, portanto, não deve ser manipulada usando a exceção Queue.Empty. Além disso, poderia tornar a depuração mais difícil quando codificada dessa forma se você considerar que a parte de manipulação de tarefas poderia ser grande.

O outro argumento é que uma das maneiras é aceitável no Python e que lidar com a tarefa fora do try / exceto pode ajudar a depurar se o tratamento de tarefas for grande, embora tenha concordado que isso pode parecer mais feio do que usar o Método 2.

Opiniões?

ATUALIZAÇÃO: Um pouco mais de informação depois que a resposta 1 apareceu ... O debate foi iniciado após o método 1 estar sendo usado em algum código multithread. Nesse caso, o código irá adquirir o bloqueio (de um objeto threading.Lock) e liberá-lo uma vez que a tarefa retornou ou Queue.Empty é lançada

UPDATE 2: Era desconhecido para nós dois que o objeto da fila era thread-safe. Parece que tentar / exceto é o caminho a percorrer!

questionAnswers(3)

yourAnswerToTheQuestion