在遍历Python队列时的异常处理
我有一堆队列存储在一个叫做 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