错误:int 对象不可迭代,如何解决?
Posted
技术标签:
【中文标题】错误:int 对象不可迭代,如何解决?【英文标题】:Error: int object is not iterable, how to resolve this? 【发布时间】:2021-04-19 13:25:23 【问题描述】:def update_basis(A, basis, i, j):
for k, var in enumerate(basis):
idx = int(var[1:])
if A[i][j] == 1:
basis[k] = "x" + str(j+1)
break
return basis
我写了上面的代码,但我收到了错误。在阅读了此处的答案之一后,我什至尝试了 range(enumerate(basis))。这似乎也不起作用。我该如何解决这个问题? PS。我从 - https://github.com/pyaf/operations-research/blob/master/simplex-method/utils.py 获取了这段代码 我知道这方面有很多类似的问题,但我就是找不到一个能回答我的问题。
Full traceback error:
TypeError Traceback (most recent call last)
<ipython-input-7-9809e74f4f64> in <module>
120 print("\nIteration number : %d" % iter_num)
121 #updating basis as variables enter and leave
--> 122 basis= update_basis(i,j,basis,nonbasic)
123 #updating table
124 A,b,c= row_operations(A,b,c,i,j)
<ipython-input-7-9809e74f4f64> in update_basis(A, basis, i, j)
76
77 def update_basis(A, basis, i, j):
---> 78 for k, var in enumerate(basis):
79 idx = int(var[1:])
80 if A[i][j] == 1:
TypeError: 'int' object is not iterable
【问题讨论】:
enumerate(range(basis))
也许?
请将您的代码edit 扩展为minimal reproducible example,并包含完整的回溯。
您将int
作为basis
传递,并且代码需要可迭代的东西。您需要查看使用此功能的位置。
var
和idx
的意义何在?它们似乎未用于计算结果。
请添加您遇到的错误的完整回溯。
【参考方案1】:
您收到此错误的原因是函数 update_basis
使用不正确的签名调用。在这段代码的某个地方(您将在错误消息中看到),一个 int 作为基础参数被传递,而这实际上应该是一个可迭代的集合。问题不在于函数本身,而在于调用它的位置。
所以要解决它,找到产生此错误的函数被调用的位置并更正参数
【讨论】:
你能看一遍整个代码吗?因为我看不到错误 看看@MisterMiyagi 的回答。与其用update_basis(i,j,basis,nonbasic)
调用它,不如用这种方式调用它:update_basis(nonbasic, basis, i,j)
【参考方案2】:
您的update_basis
函数在https://github.com/pyaf/operations-research/blob/master/simplex-method/utils.py 中定义,然后在https://github.com/pyaf/operations-research/blob/master/simplex-method/simplex.py 中使用,其中可以看到basis
预计是一个数组/列表。因此,如果您将列表作为第二个参数而不是数字传递,则错误将消失。
编辑:
我现在觉得这个
basis = update_basis(i, j, basis, nonbasic)
是你的问题。您混淆了参数的顺序。在函数定义中,它们是这样的:
def update_basis(A, basis, i, j):
因此,如果您将第 122 行更改为:
basis = update_basis(nonbasic, basis, i, j)
【讨论】:
因为这意味着var
是一个整数,所以var[1:]
会失败。
但是..我确实将基础定义为一个数组
@huy 请添加完整的代码直到第 122 行
请注意显示的函数与simplex-method.utils. update_basis
函数相似但不等于。
@huy 编辑了我的答案,但我认为宫城先生更好以上是关于错误:int 对象不可迭代,如何解决?的主要内容,如果未能解决你的问题,请参考以下文章
使用 pyspark 的 toPandas() 错误:'int' 对象不可迭代
在我尝试使用 python 解决的迷宫问题中,显示类型错误 int 对象在老鼠中不可下标
Pyautogui - 如何输入随机单词或数字(“错误:对象不可迭代”)?