迭代Python队列时的异常处理

时间:2010-12-25 21:21:01

标签: python exception queue

我在全局globqueue数组中存储了一堆队列。我现在想迭代所有这些队列并获取其中的所有项目。

但是我从队列中获取项目时遇到了一些问题。 我正在使用.get_nowait(),如果队列中没有任何内容,它将抛出“Empty”异常。我以为我能像这样抓住它:

                    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 个答案:

答案 0 :(得分:4)

您正在抓住ValueError,但通话会引发Queue.Empty。尝试更改您的except处理程序以捕获Empty异常。

try:
    getiterme = item.get_nowait()
    # etc...
except Queue.Empty:
    # etc...