Ошибка типа: объект ‘int’ не поддается подписке в словаре python

#python

#python

Вопрос:

 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])
  

Комментарии:

1. d это число 3 . Что d[i,j] предполагается означать?

2. Когда вы вызываете его как list_gen(0,3,0,3), d получает значение 3. Который является целым числом. Я полагаю, вы хотите сделать что-то еще.

3. Используя d в качестве переменной в вашем цикле, вы заменили оригинал, d который, похоже, был dict . Используйте разные имена переменных.

Ответ №1:

По-видимому, у вас есть глобальная переменная d , содержащая dict, к которой вы хотите получить доступ. Но вы использовали 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 .

Ответ №2:

Параметр в диапазоне должен быть целым числом, и поскольку for j in range(c,d): ошибка не выдала ошибку, это означает, что d равно int, и вы не можете ссылаться на int, используя d [i, j] в строке l.append(d[i,j]) . Вероятно, у вас есть переменная с именем d, область действия которой активна во время выполнения инструкции print.