在遍历Python队列时的异常处理

2 投票
1 回答
4548 浏览
提问于 2025-04-16 09:02

我有一堆队列存储在一个叫做 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 个回答

5

你现在是在处理一个叫做ValueError的错误,但实际上抛出的错误是Empty。试着把你的错误处理部分改成去捕捉Empty这个错误吧。

from _queue import Empty

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

撰写回答