代码之家  ›  专栏  ›  技术社区  ›  user288609

从生成器获取下一项失败

  •  5
  • user288609  · 技术社区  · 6 年前

    有一个代码段。运行程序会得到以下错误

    epoch, step, d_train_feed_dict, g_train_feed_dict = inf_data_gen.next()
    AttributeError: 'generator' object has no attribute 'next'
    

    相应的代码段如下所示。它背后的原因是什么?

    inf_data_gen = self.inf_get_next_batch(config)
    
    def inf_get_next_batch(self, config):
            """Loop through batches for infinite epoches.
            """
            if config.dataset == 'mnist':
                num_batches = min(len(self.data_X), config.train_size) // config.batch_size
            else:
                self.data = glob(os.path.join("./data", config.dataset, self.input_fname_pattern))
                num_batches = min(len(self.data), config.train_size) // config.batch_size
    
            epoch = 0
            while True:
                epoch += 1
                for (step, d_train_feed_dict, g_train_feed_dict) in \
                        self.get_next_batch_one_epoch(num_batches, config):
                    yield epoch, step, d_train_feed_dict, g_train_feed_dict
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Dillon Davis    6 年前

    您需要使用:

    next(inf_data_gen)
    

    而不是:

    inf_data_gen.next()
    

    python 3放弃了 .next() ,重命名为 .__next__() ,但你最好用 next(generator) 相反。

        2
  •  1
  •   Sheshank S.    6 年前

    试试这个:

    epoch, step, d_train_feed_dict, g_train_feed_dict = next(inf_data_gen)
    

    请参阅: there's no next() function in a yield generator in python 3

    在python 3中,需要使用 next() 而不是 .next() 是的。

    Dillon Davis建议:您也可以使用 .__next__() ,尽管 .next() 好多了。