Maison >développement back-end >Tutoriel Python >Pourquoi la redéfinition de « str » provoque-t-elle une « TypeError » dans les appels de fonction Python ultérieurs ?

Pourquoi la redéfinition de « str » provoque-t-elle une « TypeError » dans les appels de fonction Python ultérieurs ?

DDD
DDDoriginal
2024-12-18 18:34:17394parcourir

Why Does Redefining `str` Cause a `TypeError` in Subsequent Python Function Calls?

La redéfinition de str provoque une erreur de type lors de la deuxième exécution

Le code Python fourni présente un comportement particulier, où l'appel à example(1) s'exécute sans problème , mais example(2) déclenche une TypeError. Ce phénomène déroutant découle de la séquence de code problématique :

global str
str = str(parameter)

Au sein de ce bloc, le code attribue la valeur str(paramètre) à la variable globale str. Cette redéfinition remplace essentiellement le nom Python intégré du type de chaîne, provoquant des conflits avec les opérations ultérieures.

Le problème

La fonction str() intégrée est utilisé pour convertir des objets en chaînes. En redéfinissant str avec str(parameter), le code remplace effectivement la fonction d'origine par une variable personnalisée contenant la valeur convertie du paramètre.

En conséquence, lors du deuxième appel à example(2), lorsque le code tente d'utiliser à nouveau str, ce n'est plus une fonction mais plutôt un objet chaîne. Par conséquent, l'interpréteur génère une TypeError car les objets chaîne ne peuvent pas être appelés comme des fonctions.

La solution

Pour remédier à ce problème, évitez de modifier le nom str intégré . Attribuez plutôt un nom différent à la variable locale qui stocke la valeur convertie. De plus, supprimez l'instruction globale, ce qui est inutile puisque la variable locale ne modifie aucune variable globale existante.

Voici le code corrigé :

def example(parameter):
    s = str(parameter)  # Use a different name for the local variable
    print(s)  # Use the newly created local variable

example(1)
example(2)

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!

Déclaration:
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