Maison >développement back-end >Tutoriel Python >Pourquoi `input()` provoque-t-il une `NameError` dans Python 2.7 et comment puis-je y remédier ?

Pourquoi `input()` provoque-t-il une `NameError` dans Python 2.7 et comment puis-je y remédier ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-30 22:38:18528parcourir

Why Does `input()` Cause a `NameError` in Python 2.7, and How Can I Fix It?

Erreur input() : la résolution de l'erreur NameError « Nom » n'est pas défini

En essayant d'exécuter un script simple, les utilisateurs peuvent rencontrer l'erreur suivante :

NameError: name '...' is not defined

Cette erreur survient lors de l'utilisation de Python 2.7 avec la fonction input(), qui évalue les entrées de l'utilisateur en tant qu'expression Python. Lorsqu'on attend une entrée de chaîne, cette évaluation peut prêter à confusion.

Spécificité de Python 2.7

Python 2.7 offre deux options pour la saisie de l'utilisateur :

  • entrée  : évalue l'entrée en tant que Python expression.
  • raw_input : lit l'entrée sous forme de chaîne sans évaluation.

Dans Python 2.7, ce qui suit est vrai :

input = eval(raw_input)

Par conséquent, lors de l'utilisation de input("Entrez votre nom : "), la chaîne d'entrée, par exemple "mec", est évaluée comme une variable nom. Si aucune variable nommée "dude" n'existe dans le script, l'erreur est générée.

Problèmes de sécurité avec input() de Python 2.7

La fonctionnalité d'évaluation de input() pose des implications de sécurité. Par exemple, si le module os est importé et que l'utilisateur saisit "os.remove("/etc/hosts")", cette expression Python est exécutée et pourrait potentiellement endommager le système.

Python 3.x et Beyond

Dans Python 3.x, il n'y a qu'une seule fonction input(), qui imite essentiellement raw_input() de Python 2.7. Cela élimine l'aspect évaluation et simplifie le processus de saisie.

Solution et recommandations

Pour résoudre l'erreur NameError dans Python 2.7 lors de la lecture des entrées de chaîne, il est conseillé d'utiliser la fonction raw_input au lieu de input. Cela garantit que l'entrée est traitée comme une chaîne et non évaluée comme une expression Python. Si un traitement ou une conversion supplémentaire est nécessaire, des fonctions appropriées peuvent être utilisées pour gérer l'entrée de chaîne.

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