Saltar al contenido principal

Cómo solucionar que el objeto 'builtin_function_or_method' no sea subscribible

Para solucionar el error "'builtin_function_or_method' object is not subscriptable", asegúrate de que llamas a la función o método con paréntesis () en lugar de corchetes [].
Actualizado 29 jul 2024  · 6 min de lectura

En Python, un mensaje de error habitual es el siguiente:

'builtin_function_or_method' object is not subscriptable

Python genera este error cuando una función o método va seguido de los corchetes [] notation. Sin embargo, las funciones son objetos invocables. Por lo tanto, requieren paréntesis (), que a veces también se llaman corchetes.

Veamos un ejemplo en el que Python da este error:

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

La siguiente sección explora este error con más detalle.

Comprender el error

Las funciones de Python son objetos invocables, lo que significa que podemos utilizar paréntesis tras el nombre de la función para ejecutar el código de la definición de la función. Uno de los ejemplos más comunes de función incorporada en Python es print():

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

Los paréntesis se utilizan para llamar a una función en Python. Sin embargo, si utilizas corchetes en lugar de paréntesis, se produce un error:

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

Vamos a desglosar el mensaje de error en sus partes clave:

  • A 'builtin_function_or_method' object
  • No subscribible

En el ejemplo anterior, print() es una función incorporada. La descripción también se refiere a los métodos, que son funciones que forman parte de una clase. Python tiene muchos métodos integrados asociados a sus tipos de datos. Veamos otro ejemplo en el que aparece este mensaje de error:

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

El método .count(), como las funciones en general, necesita paréntesis:

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

Este escenario es similar al ejemplo de la introducción, que contiene el método de lista .append(). Aquí tienes la versión correcta utilizando paréntesis:

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

TypeError: El objeto 'function' no es subscriptible

Python produce un error similar con las funciones definidas por el usuario:

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

Sin embargo, la función greet_person() no es una de las funciones incorporadas en Python. El mensaje de error indica que se trata de una "función" y no de un "builtin_function_or_method".

La segunda parte del mensaje de error se refiere al término "subscriptible". Un objeto Python es subscriptible si podemos utilizar corchetes para acceder a uno de sus elementos. Un ejemplo común de objeto subscribible es una secuenciaque puede indexarse mediante corchetes:

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

Las tuplas y las cadenas son otros ejemplos de secuencias. Por tanto, también son subscribibles:

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

Python asignaciones también son subscriptibles. El mapeo más común en Python es el diccionario:

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

Se utilizan claves de diccionario en lugar de índices dentro de los corchetes.

Python: Llamable vs. Suscriptible

Las secuencias y las asignaciones son ejemplos de objetos Python suscribibles. Podemos utilizar corchetes después del nombre del objeto para acceder a un objeto desde dentro de la estructura de datos. Una clase Python crea objetos subscribibles si define el método especial .__getitem__().

Las funciones y los métodos son ejemplos de objetos invocables. Podemos utilizar paréntesis después del nombre del objeto para llamarlos. Al llamar a una función o método se ejecuta el código de la definición de la función.

Las clases son otro objeto invocable de Python. Llamar a una clase crea una instancia. En general, un objeto Python es invocable si su clase define el método especial .__call__().

Python lanza un mensaje de error similar cuando intentamos llamar a un objeto que no es invocable:

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

La variable numbers es una lista, que no es invocable. La forma correcta de acceder al primer elemento de la lista es utilizar corchetes: numbers[0]. Las funciones, los métodos y las clases son los objetos invocables más comunes en Python.

Corrige que el objeto 'builtin_function_or_method' no es subscribible`

Python lanza el mensaje de error ``'builtin_function_or_method' object is not subscriptable` cuando una función o método va seguido de corchetes. Busca corchetes justo después del nombre de la función o método y sustitúyelos por paréntesis.

En algunos casos, una función o método tiene una lista como argumento, que se define mediante corchetes. Sin embargo, ten en cuenta que la lista se define entre paréntesis:

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]

En estos ejemplos, el nombre de la función o método va seguido de un paréntesis. El argumento entre paréntesis es una lista. La notación de corchetes para definir una lista difiere de la notación de corchetes utilizada con secuencias, mapeados y otros objetos subscribibles.

Consejos de depuración

Una cosa que puedes hacer es comprobar el tipo de objeto utilizando la función incorporada type():

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

La salida confirma que el objeto es una función o método incorporado, que es invocable. También hay una función incorporada llamada callable() que devuelve True si se puede llamar a su argumento:

print(callable(numbers.append))
True

Otros consejos de depuración a tener en cuenta:

  • Comprueba el tipo de paréntesis o corchetes. Las llamadas, como las funciones y los métodos, deben ir seguidas de paréntesis. Los corchetes se utilizan para secuencias, asignaciones y otros objetos subscribibles.
  • Busca pistas en el mensaje de error que hagan referencia a funciones o métodos incorporados y objetos subscribibles. El número de línea en los mensajes de error apunta a la línea que contiene el error.

Conclusión

Los lenguajes de programación como Python utilizan marcas diferentes para fines distintos. Los corchetes se utilizan inmediatamente después del nombre de un objeto para acceder a un elemento de la estructura de datos. Esta notación de corchetes funciona con objetos suscribibles. Los corchetes también se utilizan para crear listas cuando no van inmediatamente después del nombre de un objeto.

Los paréntesis se utilizan después del nombre de un objeto para llamarlo. Las funciones y los métodos son ejemplos de objetos invocables en Python. Los paréntesis también están asociados a las tuplas en Python, y se utilizan para agrupar partes de una sentencia cuando es necesario.

Python lanza la excepción 'builtin_function_or_method' object is not subscriptable cuando una función o método incorporado va seguido de corchetes. La forma correcta de llamar a una función o método es utilizar paréntesis.

Puedes leer más sobre las funciones en el sitio web de DataCamp Funciones de Python: Cómo llamar y escribir funciones.

Temas

Aprende Python con estos cursos

curso

Introduction to Python

4 hr
5.6M
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 detallesRight Arrow
Comienza El Curso
Ver másRight Arrow
Relacionado

tutorial

Función del guión bajo(_) en el tutorial de Python

En este tutorial, vas a aprender sobre los usos del guión bajo(_) en python.

Hafeezul Kareem Shaik

8 min

tutorial

Tutorial de funciones de Python

Un tutorial sobre funciones en Python que cubre cómo escribir funciones, cómo invocarlas y mucho más.
Karlijn Willems's photo

Karlijn Willems

14 min

tutorial

Tutorial de list index() de Python

En este tutorial, aprenderás exclusivamente sobre la función index().
Sejal Jaiswal's photo

Sejal Jaiswal

6 min

tutorial

Programación orientada a objetos (POO) en Python: Tutorial

Aborda los fundamentos de la Programación Orientada a Objetos (POO) en Python: explora las clases, los objetos, los métodos de instancia, los atributos y ¡mucho más!
Théo Vanderheyden's photo

Théo Vanderheyden

12 min

tutorial

Tutorial y Ejemplos de Funciones y Métodos de Listas en Python

Conozca las funciones y métodos de lista de Python. Siga ahora ejemplos de código de list() y otras funciones y métodos de Python.
Abid Ali Awan's photo

Abid Ali Awan

7 min

See MoreSee More