TypeError:“NoneType”对象不可iterable。。。。。。。PythonE

2024-09-26 18:03:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试执行这个代码。它是用2.x编写的,我正在用python3.7修改它。我可以改变它并执行90%。但是我得到了一个类型错误。你知道吗

我有个档案训练.py你知道吗

  import SceneDesc
  import sys

  def train(epoch):
      sd = SceneDesc.scenedesc()
      model = sd.create_model()
      batch_size = 512
      model.fit_generator(sd.data_process(batch_size=batch_size), 
      steps_per_epoch=sd.no_samples/batch_size, epochs=epoch, verbose=2, 
      callbacks=None)
      model.save('Output/Model.h5', overwrite=True)
      model.save_weights('Output/Weights.h5',overwrite=True)

  if __name__=="__main__":
      train(int(sys.argv[1]))

另一个文件是场景设计. 在训练.py我正在调用我在中创建的类scenedesc场景设计文件。你知道吗

  class scenedesc():
      def __init__(self):
          self.vocab_size = None
          self.no_samples = None
          self.max_length = None
          self.index_word = None
          self.word_index = None    
          file = open("image_encodings.p", "rb")
          self.image_encodings = pickle.load(file, encoding='bytes')
          self.captions = None
          self.img_id = None
          list(self.values())

在执行训练.py文件。我得到以下错误:

   File "D:\Image-caption\Image-Captioning-master\SceneDesc.py", line 24, 
   in __init__
      list(self.values())
   TypeError: 'NoneType' object is not iterable

位于场景设计文件位于list(self.values())行。我试图解决它,但做不到。请帮我解决这个错误。你知道吗


Tags: 文件pyselfnonesizemodel错误batch
2条回答

检查类scenedesc()中的函数values(),确保它返回可iterable,很可能您忘记了values()末尾的return关键字。你知道吗

要知道的一件好事是,没有return关键字的函数,也就是说,没有显式地对函数进行编码以返回某个值,它将返回值None。你知道吗

正如@zvone在评论中提到的,问题似乎集中在这一行上,而且这一行没有产生您所期望的值:

list(self.values())

self.values()的调用正在返回一个None值,而list()希望接受某种形式的可iterable值序列,以便生成一个list。你知道吗

虽然这与您的问题没有特别的关系,但我也在想,为什么您要将self.values转换为一个列表,而不将新值保存在任何地方。你知道吗

如前所述,该行将尝试在内存中创建一个列表,但不会保存到任何地方以供进一步使用或处理。我希望有这样的结果:

    mylist = list(self.values())

没有看到与self.values()生成的内容相关的实际代码,我很难进一步诊断这个问题。正如@isaac newton所提到的,如果您的self.values()代码恰好缺少return语句,Python将默认让函数返回一个None值。你知道吗

相关问题 更多 >

    热门问题