Correction d'un objet de liste d'erreurs non appelable en Python
Les erreurs de type font partie des exceptions standard courantes dans les programmes Python. Ils résultent souvent du non-respect de la syntaxe correcte ou d’une opération sur un type de données non pris en charge.
Cette erreur survient souvent lorsque l’on tente d’appeler un objet non appelable comme nous appellerions un objet fonction normal. L’extrait de code ci-dessous renvoie une TypeError en raison de la violation de la syntaxe python correcte.
nums = [23, 34, 56, 67]
nums()
Production :
Traceback (most recent call last):
File "<string>", line 2, in <module>
TypeError: 'list' object is not callable
Un objet est considéré comme appelable si une paire de parenthèses à la fin peut déclencher son exécution, comme pour les fonctions.
Heureusement, le standard Python fournit également la fonction callable()
qui renvoie True
si un objet apparaît appelable et False
si un objet ne l’est pas.
Dans l’exemple au-dessus de la liste, l’objet n’est pas appelable, et donc nous obtiendrions certainement un False.
nums = [23, 34, 56, 67]
print(callable(nums))
Production :
False
Les fonctions, les méthodes et les classes sont appelables en Python.
En effet, leur exécution peut être invoquée à l’aide de l’opérateur d’exécution. La liste des objets appelables en Python comprend des fonctions lambda et des objets appelables personnalisés.
Les types de données tels que les tuples, les listes et les dictionnaires, en revanche, ne peuvent pas être appelés. Par conséquent, toute tentative de les exécuter en tant que fonctions ou méthodes normales en Python entraînerait une TypeError: object is not callable
.
L’objet TypeError list
qui n’est pas appelable peut également survenir lors de l’indexation d’éléments de listes à l’aide de parenthèses au lieu de crochets.
Dans la plupart des langages de programmation, les crochets sont considérés comme les opérateurs d’indexation par défaut. Cependant, lors de l’écriture de programmes, nous pouvons souvent nous retrouver à utiliser des parenthèses à la place des crochets en raison de leur grande ressemblance.
L’extrait de code ci-dessous est destiné à renvoyer l’élément à l’index deux dans la liste.
cars = ["Mazda", "Toyota", "BMW", "Tesla", "Hyundai"]
print(cars(2))
Production :
Traceback (most recent call last):
File "<string>", line 2, in <module>
TypeError: 'list' object is not callable
Bien que les novices commettent souvent cette erreur, il s’agit également d’une erreur syntaxique courante commise par des développeurs même expérimentés. Cette erreur peut être résolue en utilisant simplement des crochets pour indexer les éléments au lieu des parenthèses, comme indiqué ci-dessous.
cars = ["Mazda", "Toyota", "BMW", "Tesla", "Hyundai"]
print(cars[2])
Production :
BMW
L’utilisation de parenthèses pour effectuer l’indexation au lieu de crochets est susceptible de se produire lors de l’utilisation de la compréhension de liste pour raccourcir la syntaxe Python. En effet, les compréhensions de liste impliquent une combinaison de plusieurs crochets et parenthèses par opposition à la syntaxe Python habituelle.
Dans l’exemple ci-dessous, les parenthèses ont été mal utilisées dans la construction de la compréhension de la liste.
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)
Production :
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
L’exemple ci-dessus vise à parcourir les listes imbriquées en utilisant les index des éléments et à convertir ses éléments en majuscules. Pour résoudre l’erreur, nous devons inspecter le code et nous assurer que nous utilisons des crochets pour indexer, comme indiqué ci-dessous.
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)
Production :
[['MICROSOFT', 'APPLE', 'IBM'], ['TESLA', 'LUCID', 'NIKOLA'], ['FOXCON', 'HUAWEI', 'TENCENT']]
TypeError: list object is not callable
peut également être rencontré lorsqu’un nom prédéfini est utilisé pour nommer une variable. Certains des noms intégrés les plus couramment utilisés à mauvais escient qui pourraient provoquer une erreur de ce type incluent; str
, dict
, list
et range
.
En Python, le constructeur de liste list()
est utilisé pour créer de nouvelles listes. Puisqu’il s’agit d’un nom intégré prédéfini et d’un objet de classe représentant une liste Python, il n’est pas bon d’utiliser la liste de noms comme nom de variable.
L’utilisation de la liste de noms pour nommer la variable peut entraîner l’erreur list object is not callable
, comme indiqué dans l’exemple ci-dessous.
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")
Production :
Traceback (most recent call last):
File "<string>", line 3, in <module>
TypeError: 'list' object is not callable
Nous avons utilisé la liste de noms prédéfinie comme nom de variable dans l’exemple ci-dessus. Nous essayons d’utiliser le même nom qu’un constructeur pour créer une nouvelle liste dans la deuxième ligne.
Comme nous avions déjà utilisé ce nom comme nom de variable, Python interprète la deuxième ligne comme une tentative d’appel de l’objet liste, ce qui entraîne une erreur.
L’erreur ci-dessus peut être résolue en renommant l’objet de liste avec un nom différent. Le nouveau nom ne doit pas être un mot-clé puisqu’il garantit que le constructeur list()
conserve ses propriétés fonctionnelles.
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")
Production :
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.
LinkedInArticle connexe - Python List
- Convertir un dictionnaire en liste en Python
- Supprimer toutes les occurrences d'un élément d'une liste en Python
- Supprimer les doublons de la liste en Python
- Comment obtenir la moyenne d'une liste en Python
- Quelle est la différence entre les méthodes de liste append et extend
- Comment convertir une liste en chaîne de caractères en Python
Article connexe - Python Object
- Corriger l'erreur Object Has No Attribute en Python
- Corriger l'erreur Object Is Not Subscriptable en Python
- Méthode Python __repr__
- Trouver les méthodes d'un objet Python de 6 manières
- Déterminer la taille d'un objet en Python
Article connexe - Python Error
- Correction de TabError en Python
- Correction de l'erreur Python Return Outside Function
- Correction de l'erreur String Must Be Indices en Python
- Correction de l'erreur syntaxerror: unexpected character after line continuation character en Python
- Correction de l'erreur TypeError: iteration over a 0-d array dans Python NumPy
- Correction de l'erreur TypeError: must be str, not int en Python