2010-09-27 11 views
7

Dans un tutoriel, j'ai lu qu'il y a une différence entre input et raw_input. J'ai découvert qu'ils ont changé le comportement de ces fonctions dans Python 3.0. Quel est le nouveau comportement?Différences entre `input` et` raw_input`

Et pourquoi dans l'interpréteur de la console python ce

x = input() 

Envoie une erreur, mais si je le mets dans un file.py et l'exécuter, il ne fonctionne pas?

Répondre

14

Dans 2.x python, raw_input() renvoie une chaîne et input() évalue l'entrée dans le contexte d'exécution dans lequel il est appelé

>>> x = input() 
"hello" 
>>> y = input() 
x + " world" 
>>> y 
'hello world' 

En 3.x python, input a été mis au rebut et la fonction précédemment connue comme raw_input est maintenant input. Donc, vous devez appeler manuellement compile et que eval si vous voulez l'ancienne fonctionnalité.

python2.x     python3.x 

raw_input() --------------> input()    
input() -------------------> eval(input())  

3.x, la session ci-dessus va comme ceci

>>> x = eval(input()) 
'hello' 
>>> y = eval(input()) 
x + ' world' 
>>> y 
'hello world' 
>>> 

Alors vous obtenez probablement une erreur au interpretor parce que vous ne mettez pas les guillemets autour de votre entrée. Ceci est nécessaire car il est évalué. Où vous obtenez une erreur de nom?

+0

ce qui se passe ici j'ai essayé votre lignes sur la console (3.x) et il interprété x = entrée() "bonjour" <- je tape ceci sur la console lorsqu'on lui a demandé) x + "monde" y 'x + "monde" Pourquoi? x ne se traduit pas en une chaîne –

+0

l'erreur que je recevais >>> x = entrée() retraçage (le plus récent appel dernier): Fichier « », ligne 1, dans EOFError: EOF lors de la lecture d'une ligne –

+0

@Guillermo, La section d'interprète que j'ai montré est pour 2.x. J'ai foiré sur 3.x (je n'ai pas beaucoup joué avec ça) donc j'ai supprimé cette partie de ma réponse. – aaronasterling

3

entrée () vs raw_input()

raw_input recueille les caractères les types d'utilisateurs et les présente comme une chaîne. input() n'évalue pas simplement les nombres mais traite plutôt n'importe quelle entrée comme du code Python et essaie de l'exécuter. Un utilisateur averti mais malveillant peut saisir une commande Python pouvant même supprimer un fichier. Stick à raw_input() et convertir la chaîne dans le type de données dont vous avez besoin en utilisant les fonctions de conversion intégrées de Python.

Egalement entrée(), n'est pas à l'abri des erreurs de l'utilisateur! Il attend une expression Python valide en entrée; Si l'entrée n'est pas syntaxiquement valide, une SyntaxError sera levée.

3

est simple:

  1. raw_input() renvoie des valeurs chaîne
  2. tout entier input() retour valeurs

Exemple:

1.

x = raw_input("Enter some value = ") 
print x 

sortie:

Enter some value = 123 
'123' 

2.

y = input("Enter some value = ") 
print y 

Sortie:

Enter some value = 123 
123 

Par conséquent, si nous effectuons x + x = Il sortie comme 123123

alors que si nous effectuons y + y = sortie sera comme 246

+0

Peut-être sur python 2.x, mais pas sur python 3.x. input() dans python 3.x renvoie toujours une chaîne. De plus, raw_input() a été supprimé de python 3 –