Maison >développement back-end >Tutoriel Python >Pourquoi mon code Python génère-t-il une erreur « TypeError : l'objet 'str' n'est pas appelable » après un transtypage répété ?
Énigme du typage : exploration de la deuxième fois TypeError
Lorsque vous traitez du code Python, il n'est pas rare de rencontrer une TypeError déroutante qui semble se contredire . Une telle énigme surgit lorsque l'on tente plusieurs fois un code tel que str = str(...).
Le problème déroutant
Considérez l'extrait de code suivant :
def example(parameter): global str str = str(parameter) print(str) example(1) example(2)
Lors de l'exécution de ce code, la première invocation de l'exemple de fonction fonctionne parfaitement. Cependant, le deuxième appel déclenche une erreur :
Traceback (most recent call last): File "test.py", line 7, in <module> example(2) File "test.py", line 3, in example str = str(parameter) TypeError: 'str' object is not callable
L'explication
Ce comportement déroutant découle de l'utilisation de l'instruction globale. Sans entrer dans les complexités des variables globales et locales, le point crucial ici est que le code modifie la fonction str intégrée.
Lorsque vous exécutez global str, vous déclarez effectivement que vous souhaitez utiliser la fonction str intégrée. version globale de str au lieu de la version locale. Cependant, vous procédez ensuite à la redéfinition de la chaîne globale en tant que chaîne. Ceci est problématique car str fait partie intégrante du langage Python et ne doit pas être modifié.
La solution
Pour résoudre ce problème, évitez simplement de redéfinir la variable str globale. Utilisez plutôt un nom différent pour la variable locale et supprimez l'instruction globale. Le code corrigé ressemblerait à ceci :
def example(parameter): new_str = str(parameter) print(new_str)
Notes supplémentaires
Il est important de se rappeler que si vous avez utilisé un code comme celui-ci au Python REPL, l'affectation à la chaîne globale persistera jusqu'à ce que vous preniez d'autres mesures. Vous pouvez soit redémarrer l'interpréteur, soit supprimer la chaîne globale à l'aide de del str.
Comprendre l'interaction entre les variables globales et les variables locales est essentiel pour éviter de telles erreurs à l'avenir. En évitant soigneusement la modification des fonctions Python intégrées, vous pouvez garantir que votre code s'exécute de manière fluide et cohérente.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!