为什么这个 Tensorflow 代码会引发 tf.errors.OutOfRangeError?



下面的Tensorflow代码引发了一个tf.errors.OutofRangeError

try:
while not coord.should_stop():        
vector1,vector2,vector3,vector4,vector5,labels = sess.run([train_vector1,train_vector2,train_vector3,train_vector4,train_vector5,train_labels])
shape1 = tf.shape(vector1)
print (sess.run(shape1))
except tf.errors.OutOfRangeError:
print ('tf.errors.OutOfRangeError')
finally:
coord.request_stop()

为什么读取所有样品后仍tf.errors.OutofRangeError打印? 这似乎不合理。

来自 tf.errors.OutofRangeError doc:

当操作迭代超过有效输入范围时引发。

此异常在"文件结束"条件下引发,例如当tf.QueueBase.dequeue操作在空队列上被阻止,并且tf.QueueBase.close操作执行。

也就是说,这是一种正常的、蟒蛇式的行为。您正在迭代队列,直到它为空;你知道这是扔OutofRangeError的时候。

这也符合普通pythonQueue的行为:

import Queue
q = Queue.Queue()
try:
task=q.get(False)
# ...
except Queue.Empty:
# Handle empty queue here
pass

你可以在这里找到一个关于这个try-catch概念的优点的小型讨论:Python:Queue.Empty Exception Handling。

相关内容

  • 没有找到相关文章

最新更新