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

Python 为什么这个Tensorflow代码会引发tf.errors.OutOfRangeError?,python,tensorflow,queue,outofrangeexception,Python,Tensorflow,Queue,Outofrangeexception,下面的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])

下面的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.QueueBase.dequeue
操作在空队列上被阻止,并且
tf.QueueBase.close执行操作

也就是说,这是一种正常的、类似python的行为。您正在迭代队列,直到它为空;您知道这是在抛出
OutofRangeError
时发生的

这也与普通python
队列的行为相匹配:

导入队列
q=队列。队列()
尝试:
task=q.get(False)
# ...
队列除外。空:
#在这里处理空队列
通过
您可以在这里找到一个关于“尝试捕捉”概念优点的小讨论: