错误: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 传递,并且代码需要可迭代的东西。您需要查看使用此功能的位置。 varidx 的意义何在?它们似乎未用于计算结果。 请添加您遇到的错误的完整回溯。 【参考方案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' 对象不可迭代

difflib,类型错误 int 对象不可迭代

在我尝试使用 python 解决的迷宫问题中,显示类型错误 int 对象在老鼠中不可下标

Pyautogui - 如何输入随机单词或数字(“错误:对象不可迭代”)?

如何解决我的“list_reverseiterator”对象不可下标”错误?

TypeError:'int'对象不可迭代 - Python