Обработка исключений при переборе очередей Python - PullRequest
1 голос
/ 26 декабря 2010

У меня есть куча очередей, хранящихся в глобальном массиве globqueue. Теперь я хочу перебрать все эти очереди и получить все элементы внутри них.

У меня есть несколько проблем с получением элементов из очереди. Я использую .get_nowait (), которая вызовет исключение «Пусто», если в очереди ничего нет. Я думал, что смогу поймать это так:

                    for index, item in enumerate(globqueue):
                        print index, item

                        iterme = 1

                        while iterme:
                            try:
                                getiterme = item.get_nowait()
                                print getiterme
                            except ValueError:
                                iterme = 0
                                continue

Но я все еще получаю эту ошибку, и остальная часть кода не будет продолжаться:

Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python2.6/threading.py", line 532, in __bootstrap_inner
    self.run()
  File "server.py", line 213, in run
    getiterme = item.get_nowait()
  File "/usr/lib/python2.6/Queue.py", line 190, in get_nowait
    return self.get(False)
  File "/usr/lib/python2.6/Queue.py", line 165, in get
    raise Empty
Empty

Я знаю, что сначала могу проверить размер очереди с помощью .qsize(), но я также читаю, что это не всегда так точно, так что ... лучше попросить прощения, чем разрешения, верно?

1 Ответ

4 голосов
/ 26 декабря 2010

Вы ловите ValueError, но звонок повышается Queue.Empty. Попробуйте изменить ваш обработчик кроме, чтобы перехватить исключение Empty.

try:
    getiterme = item.get_nowait()
    # etc...
except Queue.Empty:
    # etc...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...