TypeError:'int'对象在python字典中不可订阅

问题描述 投票:0回答:2
def list_gen(a,b,c,d):
    print(a,b,c,d)
    l=[]
    for i in range(a,b):
        for j in range(c,d):
            l.append(d[i,j])
    return l

当我将参数传递给函数list_gen(0,3,0,3)时,我得到以下错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-51-ac343943d448> in <module>()
----> 1 list_gen(0,3,0,3)

<ipython-input-49-afc3d3a347a9> in list_gen(a, b, c, d)
      4     for i in range(a,b):
      5         for j in range(c,d):
----> 6             l.append(d[i,j])
      7     return l

TypeError: 'int' object is not subscriptable

但是这段代码没有任何问题。谁能告诉我这里的错误是什么?

for i in range(0,3):
    for j in range(0,3):
        print(d[i,j])
python
2个回答
0
投票

显然你有一个全局变量d包含你想要访问的字典。但是您使用d作为函数参数的名称,因此隐藏了全局名称。当你使用d[i,j]时,它会尝试索引数字3,这是不可能的。

解决方案是为函数参数使用不同的变量。

def list_gen(a,b,c,e):
    print(a,b,c,e)
    l=[]
    for i in range(a,b):
        for j in range(c,e):
            l.append(d[i,j])
    return l

如果你使用比d更冗长,更有意义的变量名,你会遇到这样的问题。


0
投票

范围内的参数必须是整数,因为for j in range(c,d):没有抛出错误,它意味着d是int,你不能使用行l.append(d[i,j])中的d [i,j]来引用int。您可能有一个名为d的变量,其范围在print语句期间处于活动状态。

© www.soinside.com 2019 - 2024. All rights reserved.