【问题标题】:next(h) TypeError: 'int' object is not an iteratornext(h) TypeError: 'int' 对象不是迭代器
【发布时间】:2018-08-17 16:35:13
【问题描述】:

这个块代码给了我这个错误'TypeError:'int' object is not an iterator'。我找不到问题,因为我有一个几乎相同的程序,它工作得很好。

else:
     v3=r
     for h in range(0,len(oddnums)):

         if v1+v2+v3+v4==totalvals:
             temp=[v1,v2,v3,v4]
             combinations.append(temp)
         else:
           next(h)
           print()

这里是完整的源代码: 全局奇数 全球温度 全局组合计数 全局组合 全球计算 全球总计 全局范围 全球 v4

 for i in range (0 ,len(oddnums)):
     v1=oddnums[i]
     if i>=totalvals:
         next(i)
         print()
     else:
         print("v1")
#print(v1)
     for x in range (0,len(oddnums)):
         v2=oddnums[x]
         print('v2')
         total=x+i
         if total >=totalvals:
          next(x)
         print()
     else:
      rem=totalvals-(x+i)
     if rem<4:
         next(x)
         print()
     else:
         print()

     for r in range (0,len(oddnums)):

         #print('v3')
         count += 1
         #print(count)

         lrem = rem - oddnums[r]
         if lrem<1:
            next(r)
            print('no val')
         else:
             v3=r
             for h in range(0,len(oddnums)):

                 if v1+v2+v3+v4==totalvals:
                     temp=[v1,v2,v3,v4]
                     combinations.append(temp)
                 else:
                   next(h)
                   print()
 my_method()

完整的错误信息:

Traceback(最近一次调用最后一次): 你好 文件“C:/Users/willf/Documents/Transition Task/question1/src/com/companyBoolean/4waycombo.py”,第 92 行,在 v1 我的方法() v2

文件“C:/Users/willf/Documents/Transition Task/question1/src/com/companyBoolean/4waycombo.py”,第 84 行,在 my_method 下一个(h) TypeError: 'int' 对象不是迭代器

进程以退出代码 1 结束

【问题讨论】:

  • 请附上完整的错误信息。

标签: python


【解决方案1】:

问题在于尝试使用next(i)next(x)ix 是由 range 迭代器生成的整数,而不是迭代器本身。

将这些行更改为 continue 应该没问题。

【讨论】:

  • @DYZ,对,“range 迭代器”我的意思是由range 对象生成的迭代器。不过,这是一个有用的区别,所以谢谢。
  • 好吧,range 不会产生迭代器。它产生一个可迭代的。您可能想通过我提供的链接阅读博客文章,这可能会大开眼界:)
  • 不,我明白其中的区别。 range 是一个类,调用它(range(10) 或其他)会得到一个range object。在 object 实例上调用 __iter__() 会生成 range_iterator 的实例。 range_iterator 对象是由range 对象生成的迭代器,这就是我所说的range 迭代器的意思。
  • 它是范围对象产生的,而不是范围对象产生的。再一次,range 与迭代器的关系并不比任何其他可迭代对象更多。你不会说“一个元组产生一个迭代器”?
【解决方案2】:

问题出在这里:

 else:
     next(h)
     print()

next() 获取 迭代器 的下一项。因为 h 是一个int,所以它不能被迭代。

您不需要在 for 循环中使用 next(),因为 for 循环在没有其他代码的情况下进行迭代(每次运行循环时 h 都会增加)。

【讨论】:

    猜你喜欢
    • 2017-09-11
    • 1970-01-01
    • 2023-01-22
    • 2018-09-29
    • 2020-02-26
    • 2015-04-06
    • 2013-10-31
    • 2018-03-14
    相关资源
    最近更新 更多