/
Вопросы и ответы
/
Python
/

Почему в Python возникает ошибка TypeError: function object is not subscriptable при вызове функции через квадратные скобки

Почему в Python возникает ошибка TypeError: function object is not subscriptable при вызове функции через квадратные скобки

Я попытался повторить пример из README:

>>> m = make_module()
>>> m['inc'](10) 11 >>> m['dec'](20)
19
>>> m2 = make_module(step=2)
>>> m2['inc'](1)
3
>>>

то выводится ошибка "TypeError: 'function' object is not subscriptable" Почему так?

На сайте решение работает, но у меня в VSCode выводится ошибка:

TypeError: 'function' object is not subscriptable

Что это значит и как исправить?

8 часов назад

Nikolai Gagarinov

Ответы

1

Ошибка TypeError: 'function' object is not subscriptable появляется, когда вы пытаетесь использовать квадратные скобки ([...]) для функции. В Python функции нельзя индексировать или обращаться к ним как к словарю.

Скорее всего, ваша функция make_module() возвращает функцию, а не словарь с функциями. В README пример предполагает, что make_module() возвращает словарь, где ключи 'inc' и 'dec' соответствуют функциям:

def make_module(step=1):
    def inc(x):
        return x + step
    def dec(x):
        return x - step
    return {'inc': inc, 'dec': dec}

После этого можно обращаться к функциям через ключи словаря:

m = make_module()
print(m )  # 11
print(m )  # 19

m2 = make_module(step=2)
print(m2 )  # 3

Если же make_module() возвращает просто функцию, а не словарь, нужно либо изменить возвращаемое значение, либо вызывать функцию напрямую:

inc = make_module()
print(inc(10))

8 часов назад

Nikolai Gagarinov