Je veux obtenir une chaîne d'un utilisateur, puis la manipuler.
testVar = input("Ask user for something.")
Existe-t-il un moyen pour testVar d'être une chaîne sans que l'utilisateur tape sa réponse entre guillemets? c'est-à-dire "Hello" vs. Hello
Si l'utilisateur tape Hello, j'obtiens l'erreur suivante:
NameError: le nom 'Hello' n'est pas défini
python
string
python-2.7
Mike Lee
la source
la source
input
appelle automatiquementeval()
Réponses:
Utilisez à la
raw_input()
place deinput()
:input()
évalue en fait l'entrée en tant que code Python. Je suggère de ne jamais l'utiliser.raw_input()
renvoie la chaîne verbatim entrée par l'utilisateur.la source
input
fonctionne maintenant de cette façon, et raw_input a disparu.input()
soit une fonction utile, et je ne recommande pas de l'utiliser.La fonction
input
évaluera également les données qu'elle vient de lire en tant que code python, ce qui n'est pas vraiment ce que vous voulez.L'approche générique consisterait à traiter l'entrée utilisateur (de
sys.stdin
) comme n'importe quel autre fichier. EssayerSi vous voulez être bref, vous pouvez utiliser
raw_input
ce qui est identique àinput
mais omet l'évaluation.la source
readline
- cela donnera des fonctionnalités similaires à bash (l'historique prêt à l'emploi, l'auto-complétion nécessitera un peu de travail)Nous pouvons utiliser la
raw_input()
fonction en Python 2 et lainput()
fonction en Python 3. Par défaut, la fonction d'entrée prend une entrée au format chaîne. Pour un autre type de données, vous devez convertir l'entrée utilisateur.En Python 2, nous utilisons la
raw_input()
fonction. Il attend que l'utilisateur tape une entrée et appuie surreturn
et nous devons stocker la valeur dans une variable en convertissant le type de données souhaité. Soyez prudent lors de l'utilisation du type castingEn Python 3, nous utilisons la fonction input () qui renvoie une valeur d'entrée utilisateur.
Si vous entrez une chaîne, int, float, eval, cela prendra comme entrée de chaîne
Si vous entrez une chaîne pour int cast
ValueError: invalid literal for int() with base 10:
Si vous entrez une chaîne pour la distribution flottante
ValueError: could not convert string to float
Si vous entrez une chaîne pour eval cast
NameError: name ' ' is not defined
Ces erreurs s'appliquent également à Python 2.la source
Si vous souhaitez utiliser input au lieu de raw_input dans python 2.x, cette astuce vous sera utile
Après quoi,
fonctionnera très bien.
la source
la source
Mon code de travail avec des correctifs:
la source
C'est mon travail pour échouer en toute sécurité au cas où je devrais passer à Python 3 à l'avenir.
la source
Le problème semble être résolu dans la version 3.4.2 de Python.
Fonctionnera très bien.
la source
input
est équivalent à Python 2.xraw_input
(voir docs.python.org/3.0/whatsnew/3.0.html#builtins ); il s'agit d'un problème spécifique à 2.x.