小编use*_*903的帖子

Python:Queue.Empty异常处理

在与某人就Python中的异常处理进行了短暂的辩论 - 由于处理队列对象而引发的 - 我以为我会把它扔出去......

方法1:

import Queue

q = Queue.Queue()

try:
    task=q.get(False)
    #Opt 1: Handle task here and call q.task_done()
except Queue.Empty:
    #Handle empty queue here
    pass

#Opt2: Handle task here and call q.task_done()
Run Code Online (Sandbox Code Playgroud)

方法2:

import Queue

q = Queue.Queue()

if q.empty():
    #Handle empty queue here
else:
    task = q.get()
    #Handle task here
    q.task_done()
Run Code Online (Sandbox Code Playgroud)

一个参数是方法1是错误的,因为队列为空不是错误,因此不应使用Queue.Empty异常处理.此外,如果您认为任务处理部分可能很大,那么在以这种方式编码时,它可能会使调试更加困难.

另一个论点是,在Python中可以接受任何一种方式,并且如果任务处理很大,处理try/except之外的任务可能有助于调试,尽管同意这可能看起来比使用方法2更丑.

意见?

更新:在回答1出现之后再多一点信息......争论是在方法1在一些多线程代码中使用之后开始的.在这种情况下,代码将获取锁(来自threading.Lock对象)并在其返回的任务或Queue.Empty被抛出时释放它

更新2:我们俩都不知道队列对象是线程安全的.看起来像尝试/除了是要走的路!

python queue exception-handling

16
推荐指数
3
解决办法
4万
查看次数

标签 统计

exception-handling ×1

python ×1

queue ×1