Arreglar el objeto de la lista de errores no invocable en Python
Los errores de tipos son algunas de las excepciones estándar comunes en los programas de Python. A menudo son el resultado de no cumplir con la sintaxis correcta o de una operación en un tipo de datos no compatible.
Este error a menudo surge cuando uno intenta llamar a un objeto no invocable como llamaríamos a un objeto de función normal. El fragmento de código a continuación devuelve un TypeError debido a la violación de la sintaxis de python correcta.
nums = [23, 34, 56, 67]
nums()
Producción :
Traceback (most recent call last):
File "<string>", line 2, in <module>
TypeError: 'list' object is not callable
Un objeto se considera invocable si un par de paréntesis finales puede desencadenar su ejecución, como ocurre con las funciones.
Afortunadamente, el estándar de Python también proporciona la función callable()
que devuelve True
si un objeto parece invocable y False
si un objeto no es invocable.
En el ejemplo anterior a la lista, el objeto no se puede llamar y, por lo tanto, obtendríamos un Falso.
nums = [23, 34, 56, 67]
print(callable(nums))
Producción :
False
Las funciones, los métodos y las clases se pueden llamar en Python.
Esto se debe a que su ejecución se puede invocar mediante el operador de ejecución. La lista de objetos a los que se puede llamar en Python incluye funciones lambda y objetos a los que se puede llamar personalizados.
Los tipos de datos como tuplas, listas y diccionarios, por otro lado, no se pueden llamar. Por lo tanto, cualquier intento de ejecutarlos como funciones o métodos normales en Python daría como resultado un TypeError: object is not callable
.
El objeto list
TypeError que no se puede llamar también puede surgir al indexar elementos de listas usando paréntesis en lugar de corchetes.
En la mayoría de los lenguajes de programación, los corchetes se consideran los operadores de indexación predeterminados. Sin embargo, al escribir programas, a menudo podemos encontrarnos usando paréntesis en lugar de corchetes debido a su gran parecido.
El fragmento de código a continuación está destinado a devolver el elemento en el índice dos de la lista.
cars = ["Mazda", "Toyota", "BMW", "Tesla", "Hyundai"]
print(cars(2))
Producción :
Traceback (most recent call last):
File "<string>", line 2, in <module>
TypeError: 'list' object is not callable
Aunque los novatos a menudo cometen este error, también es un error sintáctico común cometido incluso por desarrolladores experimentados. Este error se puede resolver simplemente usando corchetes para indexar elementos en lugar de paréntesis, como se muestra a continuación.
cars = ["Mazda", "Toyota", "BMW", "Tesla", "Hyundai"]
print(cars[2])
Producción :
BMW
Es probable que se usen paréntesis para realizar la indexación en lugar de corchetes cuando se usa la comprensión de listas para acortar la sintaxis de Python. Esto se debe a que las listas por comprensión implican una combinación de varios corchetes y paréntesis en lugar de la sintaxis habitual de Python.
En el siguiente ejemplo, los paréntesis se han usado incorrectamente al construir la comprensión de la lista.
top_companies = [
["microsoft", "apple", "ibm"],
["tesla", "lucid", "nikola"],
["foxcon", "huawei", "tencent"],
]
result = [[row(index).upper() for index in range(len(row))] for row in top_companies]
print(result)
Producción :
Traceback (most recent call last):
File "<string>", line 2, in <module>
File "<string>", line 2, in <listcomp>
File "<string>", line 2, in <listcomp>
TypeError: 'list' object is not callable
El ejemplo anterior tiene la intención de iterar a través de las listas anidadas utilizando los índices de los elementos y convertir sus elementos a mayúsculas. Para resolver el error, debemos inspeccionar el código y asegurarnos de usar corchetes para indexar, como se muestra a continuación.
top_companies = [
["microsoft", "apple", "ibm"],
["tesla", "lucid", "nikola"],
["foxcon", "huawei", "tencent"],
]
result = [[row[index].upper() for index in range(len(row))] for row in top_companies]
print(result)
Producción :
[['MICROSOFT', 'APPLE', 'IBM'], ['TESLA', 'LUCID', 'NIKOLA'], ['FOXCON', 'HUAWEI', 'TENCENT']]
TypeError: list object is not callable
también se puede encontrar cuando se usa un nombre predefinido para nombrar una variable. Algunos de los nombres incorporados mal utilizados más comúnmente que podrían generar un error de este tipo incluyen; str
, dict
, lista
y range
.
En Python, el constructor de listas list()
se usa para crear nuevas listas. Dado que este es un nombre incorporado predefinido y un objeto de clase que representa una lista de Python, no es bueno usar la lista de nombres como nombre de variable.
El uso de la lista de nombres para nombrar la variable podría dar como resultado el error list object is not callable
, como se muestra en el ejemplo a continuación.
list = [24, 24, 25, 26, 28, 56]
nums_range = list(range(20, 40))
for number in list:
if number in nums_range:
print(number, "is the range")
else:
print(number, "number is not in range")
Producción :
Traceback (most recent call last):
File "<string>", line 3, in <module>
TypeError: 'list' object is not callable
Usamos la lista de nombres predefinidos como nombre de variable en el ejemplo anterior. Intentamos usar el mismo nombre como constructor para crear una nueva lista en la segunda línea.
Como ya habíamos usado este nombre como nombre de variable, Python interpreta la segunda línea como un intento de llamar al objeto de la lista, lo que genera un error.
El error anterior se puede resolver cambiando el nombre del objeto de la lista a un nombre diferente. El nuevo nombre no debe ser una palabra clave ya que asegura que el constructor list()
conserve sus propiedades funcionales.
nums = [23, 24, 25, 28, 27, 35, 78]
nums_range = list(range(20, 40))
for number in nums:
if number in nums_range:
print(number, "is the range")
else:
print(number, "is not in the range")
Producción :
23 is the range
24 is the range
25 is the range
28 is the range
27 is the range
35 is the range
78 is not in the range
Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.
LinkedInArtículo relacionado - Python List
- Convertir un diccionario en una lista en Python
- Eliminar todas las apariciones de un elemento de una lista en Python
- Eliminar duplicados de una lista en Python
- Cómo obtener el promedio de una lista en Python
- ¿Cuál es la diferencia entre los métodos de lista que añaden y amplían
- Cómo convertir una lista en cadena en Python
Artículo relacionado - Python Object
- Agregar atributo a objeto en Python
- Objetos anónimos en Python
- Arreglar el error Object Has No Attribute en Python
- Cómo arreglar el error Object Is Not Subscriptable en Python
- Método Python __repr__
Artículo relacionado - Python Error
- Administrar fallas de segmentación en Python
- Archivo <Stdin>, Línea 1, en <Módulo> Error en Python
- Arreglar AttributeError: el objeto 'generador' no tiene atributo 'siguiente' en Python
- Arreglar el comando cl.exe falló: no existe tal archivo o directorio en Windows
- Arreglar NameError: la variable no está definida en Python
- Arreglar Socket.Gaierror: [Errno 8] Nodename ni Servname proporcionado, o desconocido en Python