迭代 Python 队列时的异常处理

ske*_*rit 2 python queue exception

我在全局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
Run Code Online (Sandbox Code Playgroud)

但是我仍然收到这个错误,其余的代码不会继续:

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
Run Code Online (Sandbox Code Playgroud)

我知道我可以先用 来检查队列的大小.qsize(),但我也读到这并不总是那么准确,所以......请求宽恕比许可更好,对吧?

Mar*_*ers 5

您正在接球,ValueError但跟注加注了Empty。尝试更改您的 except 处理程序以捕获Empty异常。

from _queue import Empty

if __name__ == '__main__':
    try:
        item = item.get_nowait()
        # do some work
    except Empty:
        pass # handle error
Run Code Online (Sandbox Code Playgroud)

  • @skrit:`except Exception:`(或者更糟的是,`except:`)非常危险。它甚至捕获了`NameError` - 即愚蠢的拼写错误和其他您想了解的**错误** 将被静音。正确的解决方案如何“不起作用”? (2认同)