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