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é ?

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é ?

Susan Sarandon
Libérer: 2024-12-15 20:19:28
original
247 Les gens l'ont consulté

Why Does My Python Code Throw a `TypeError: 'str' object is not callable` After Repeated Typecasting?

É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)
Copier après la connexion

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
Copier après la connexion

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)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal