下面的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。