Python: Queue.Empty Exception Handling

Po krótkiej debacie z kimś na temat obsługi wyjątków w Pythonie - wywołanej przez obsługę obiektu kolejki - pomyślałem, że go tam wyrzucę ...

METODA 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()
METODA 2:
import Queue

q = Queue.Queue()

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

Jednym z argumentów jest to, że metoda 1 jest błędna, ponieważ pusta kolejka nie jest błędem i dlatego nie powinna być obsługiwana przy użyciu wyjątku Queue.Empty. Ponadto może to utrudnić debugowanie, gdy kodowane jest w ten sposób, jeśli uważasz, że część obsługi zadań może potencjalnie być duża.

Innym argumentem jest to, że w Pythonie akceptowana jest każda z tych metod, a obsługa zadania poza try / except może pomóc w debugowaniu, jeśli obsługa zadań jest duża, chociaż zgadza się, że może to wyglądać brzydiej niż w przypadku metody 2.

Opinie?

AKTUALIZACJA: Trochę więcej informacji po otrzymaniu odpowiedzi 1… Debata rozpoczęła się po użyciu metody 1 w jakimś kodzie wielowątkowym. W takim przypadku kod uzyska blokadę (z obiektu threading.Lock) i zwolni go, gdy tylko zadanie, które zwróciło, lub Queue.Empty zostanie wygenerowane

AKTUALIZACJA 2: Obaj nie wiedzieliśmy, że obiekt kolejki jest bezpieczny dla wątków. Wygląda na to, że spróbuj / wyjątkiem jest droga!

questionAnswers(3)

yourAnswerToTheQuestion