Pular para o conteúdo principal

Como corrigir o objeto "builtin_function_or_method" que não é subscritível

Para corrigir o erro "'builtin_function_or_method' object is not subscriptable", verifique se você está chamando a função ou o método com parênteses () em vez de colchetes [].
Actualizado 30 de jul. de 2024  · 6 min de leitura

Em Python, uma mensagem de erro comum é a seguinte:

'builtin_function_or_method' object is not subscriptable

O Python gera esse erro quando uma função ou método é seguido pela notação [] entre colchetes. No entanto, as funções são objetos que podem ser chamados. Portanto, eles exigem parênteses (), que às vezes também são chamados de colchetes.

Vamos dar uma olhada em um exemplo em que o Python apresenta esse erro:

numbers = [2, 4, 6, 8]
numbers.append[10]
Traceback (most recent call last):
  ...
TypeError: 'builtin_function_or_method' object is not subscriptable

A seção a seguir explora esse erro em mais detalhes.

Entendendo o erro

As funções do Python são objetos que podem ser chamados, o que significa que podemos usar parênteses após o nome da função para executar o código na definição da função. Um dos exemplos mais comuns de uma função integrada em Python é print():

print("This is a built-in function")
This is a built-in function

Os parênteses são usados para chamar uma função em Python. No entanto, o uso de colchetes em vez de parênteses gera um erro:

print["This is a built-in function"]
Traceback (most recent call last):
  ...
TypeError: 'builtin_function_or_method' object is not subscriptable

Vamos dividir a mensagem de erro em suas partes principais:

  • Um objeto "builtin_function_or_method".
  • Não subscritível

No exemplo acima, print() é uma função incorporada. A descrição também se refere a métodos, que são funções que fazem parte de uma classe. O Python tem muitos métodos internos associados a seus tipos de dados. Vamos dar uma olhada em outro exemplo que gera essa mensagem de erro:

name = "DataCamp"
print(name.count["a"])
Traceback (most recent call last):
  ...
TypeError: 'builtin_function_or_method' object is not subscriptable

O método .count(), assim como as funções em geral, precisa de parênteses:

print(name.count("a"))
3

Esse cenário é semelhante ao exemplo da introdução, que contém o método de lista .append(). Aqui está a versão correta usando parênteses:

numbers = [2, 4, 6, 8]
numbers.append(10)
print(numbers)
[2, 4, 6, 8, 10]

TypeError: o objeto 'function' não é subscritível

O Python apresenta um erro semelhante com funções definidas pelo usuário:

def greet_person(name):
    print(f"Hello {person}")
   
greet_person["James"]
Traceback (most recent call last):
  ...
TypeError: 'function' object is not subscriptable

No entanto, a função greet_person() não é uma das funções internas do Python. A mensagem de erro afirma que se trata de uma "função" em vez de um "builtin_function_or_method".

A segunda parte da mensagem de erro refere-se ao termo "subscriptable". Um objeto Python é subscritível se pudermos usar colchetes para acessar um de seus elementos. Um exemplo comum de um objeto subscritível é uma sequênciaque pode ser indexada usando colchetes:

print(numbers[0])
print(numbers[-1])
print(numbers[1:4])
2
10
[4, 6, 8]

Tuplas e cadeias de caracteres são outros exemplos de sequências. Portanto, eles também são subscritíveis:

more_numbers = 10, 30, 50
print(more_numbers[0])
name = "DataCamp"
print(name[0])
10
'D'

Python mapeamentos também são subscritíveis. O mapeamento mais comum em Python é o dicionário:

points = {"James": 10, "Mary": 14}
print(points["Mary"])
14

As chaves do dicionário são usadas em vez de índices entre colchetes.

Python: Chamável vs. Subscritível

Sequências e mapeamentos são exemplos de objetos Python subscritíveis. Você pode usar colchetes após o nome do objeto para acessá-lo a partir da estrutura de dados. Uma classe Python cria objetos subscritíveis se você definir o método especial .__getitem__().

Funções e métodos são exemplos de objetos chamáveis. Podemos usar parênteses após o nome do objeto para chamá-los. A chamada de uma função ou método executa o código na definição da função.

As classes são outro objeto Python que você pode chamar. Ao chamar uma classe, você cria uma instância. Em geral, um objeto Python é chamável se sua classe definir o método especial .__call__().

O Python exibe uma mensagem de erro semelhante quando você tenta chamar um objeto que não pode ser chamado:

numbers = [2, 4, 6, 8]
print(numbers(0))
Traceback (most recent call last):
  ...
TypeError: 'list' object is not callable

A variável numbers é uma lista, que não pode ser chamada. A maneira correta de acessar o primeiro item da lista é usar colchetes: numbers[0]. Funções, métodos e classes são os objetos chamáveis mais comuns em Python.

Correção: o objeto 'builtin_function_or_method' não é subscritível`

O Python gera a mensagem de erro ``O objeto builtin_function_or_method' não é subscritível`` quando uma função ou método é seguido por colchetes. Observe se há colchetes logo após o nome da função ou do método e substitua-os por parênteses.

Em alguns casos, uma função ou método tem uma lista como argumento, que é definida usando colchetes. No entanto, observe que a lista é definida entre parênteses:

number_of_values = len([10, 30, 50])
print(number_of_values)
numbers = [2, 4, 6, 8]
numbers.extend([10, 12])
print(numbers)
3
[2, 4, 6, 8, 10, 12]

Nesses exemplos, o nome da função ou do método é seguido por parênteses. O argumento entre parênteses é uma lista. A notação de colchetes para definir uma lista é diferente da notação de colchetes usada com sequências, mapeamentos e outros objetos subscritíveis.

Dicas de depuração

Uma coisa que você pode fazer é verificar o tipo de objeto usando a função integrada type():

print(type(print))
numbers = [2, 4, 6, 8]
print(type(numbers.append))
<class 'builtin_function_or_method'>

O resultado confirma que o objeto é uma função ou método interno, que pode ser chamado. Há também uma função interna chamada callable() que retorna True se seu argumento puder ser chamado:

print(callable(numbers.append))
True

Outras dicas de depuração que você deve considerar:

  • Verifique o tipo de colchetes ou parênteses. Os chamáveis, como funções e métodos, precisam ser seguidos por parênteses. Os colchetes são usados para sequências, mapeamentos e outros objetos subscritíveis.
  • Procure pistas na mensagem de erro referentes a funções ou métodos incorporados e objetos subscritíveis. O número da linha nas mensagens de erro aponta para a linha que contém o erro.

Conclusão

Linguagens de programação como Python usam marcas diferentes para propósitos distintos. Os colchetes são usados imediatamente após o nome de um objeto para acessar um elemento da estrutura de dados. Essa notação de colchetes funciona em objetos subscritíveis. Os colchetes também são usados para criar listas quando não são seguidos imediatamente após o nome de um objeto.

Os parênteses são usados após o nome de um objeto para chamá-lo. Funções e métodos são exemplos de objetos chamáveis em Python. Os parênteses também estão associados a tuplas no Python e são usados para agrupar partes de uma declaração quando necessário.

O Python levanta a exceção 'builtin_function_or_method' object is not subscriptable quando uma função ou método incorporado é seguido por colchetes. A maneira correta de chamar uma função ou método é usar parênteses.

Você pode ler mais sobre funções no site da DataCamp Funções Python: Como chamar e escrever funções.

Temas

Aprenda Python com estes cursos!

curso

Introduction to Python

4 hr
5.7M
Master the basics of data analysis with Python in just four hours. This online course will introduce the Python interface and explore popular packages.
Ver DetalhesRight Arrow
Iniciar curso
Ver maisRight Arrow
Relacionado

tutorial

Função do sublinhado (_) no tutorial de Python

Neste tutorial, você aprenderá sobre os usos do sublinhado (_) em python.
Hafeezul Kareem Shaik's photo

Hafeezul Kareem Shaik

8 min

tutorial

Tutorial de funções Python

Um tutorial sobre funções em Python que aborda como escrever funções, como chamá-las e muito mais!
Karlijn Willems's photo

Karlijn Willems

14 min

tutorial

Tutorial de indexação de lista Python()

Neste tutorial, você aprenderá exclusivamente sobre a função index().
Sejal Jaiswal's photo

Sejal Jaiswal

6 min

tutorial

Tutorial de Python

Em Python, tudo é objeto. Números, cadeias de caracteres (strings), DataFrames, e até mesmo funções são objetos. Especificamente, qualquer coisa que você usa no Python tem uma classe, um modelo associado por trás.
DataCamp Team's photo

DataCamp Team

3 min

tutorial

Programação orientada a objetos em Python (OOP): Tutorial

Aborde os fundamentos da programação orientada a objetos (OOP) em Python: explore classes, objetos, métodos de instância, atributos e muito mais!
Théo Vanderheyden's photo

Théo Vanderheyden

12 min

Ver maisVer mais