Quelle est la différence entre raw_input()
et input()
en Python 3?
input
à raw_input
et ignorer les erreurs de nom.
Quelle est la différence entre raw_input()
et input()
en Python 3?
input
à raw_input
et ignorer les erreurs de nom.
Réponses:
La différence est qu'il raw_input()
n'existe pas dans Python 3.x, alors input()
qu'il existe . En fait, l'ancien raw_input()
a été renommé input()
et l'ancien a input()
disparu, mais peut facilement être simulé à l'aide de eval(input())
. (N'oubliez pas que eval()
c'est mauvais. Essayez d'utiliser des méthodes plus sûres pour analyser votre entrée si possible.)
raw_input
...?" - "La différence est qu'il n'y a pas raw_input
." ... Une différence assez radicale, je dirais!
eval
(et exec
) devraient généralement être évités car ils peuvent constituer un risque pour la sécurité. Pour plus de détails, veuillez consulter Eval est vraiment dangereux par le vétéran de SO Ned Batchelder. Et bien sûr, ces conseils s'appliquent également à l'ancien Python 2 input
.
eval()
et exec()
, mais vous devez d'abord comprendre pourquoi vous ne devriez pas utiliser eval()
avant de décider de l'utiliser.
En Python 2 , raw_input()
renvoie une chaîne et input()
tente d'exécuter l'entrée en tant qu'expression Python.
Comme obtenir une chaîne était presque toujours ce que vous vouliez, Python 3 le fait avec input()
. Comme le dit Sven, si jamais vous voulez l'ancien comportement, ça eval(input())
marche.
raw_input()
.
raw_input()
prend exactement ce que l'utilisateur a tapé et le retransmet sous forme de chaîne.
input()
prend d'abord le raw_input()
puis effectue également un eval()
dessus.
La principale différence est input()
qu'attend une instruction python syntaxiquement correcte où raw_input()
non.
raw_input()
a été renommé en renvoie input()
maintenant input()
la chaîne exacte.input()
été supprimé.Si vous souhaitez utiliser l'ancien input()
, ce qui signifie que vous devez évaluer une entrée utilisateur en tant qu'instruction python, vous devez le faire manuellement à l'aide de eval(input())
.
En Python 3, raw_input()
n'existe pas qui a déjà été mentionné par Sven.
En Python 2, la input()
fonction évalue votre entrée.
Exemple:
name = input("what is your name ?")
what is your name ?harsha
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
name = input("what is your name ?")
File "<string>", line 1, in <module>
NameError: name 'harsha' is not defined
Dans l'exemple ci-dessus, Python 2.x essaie d'évaluer harsha comme une variable plutôt que comme une chaîne. Pour éviter cela, nous pouvons utiliser des guillemets doubles autour de notre entrée comme "harsha":
>>> name = input("what is your name?")
what is your name?"harsha"
>>> print(name)
harsha
entrée brute()
La fonction raw_input () `n'évalue pas, elle lit simplement ce que vous entrez.
Exemple:
name = raw_input("what is your name ?")
what is your name ?harsha
>>> name
'harsha'
Exemple:
name = eval(raw_input("what is your name?"))
what is your name?harsha
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
name = eval(raw_input("what is your name?"))
File "<string>", line 1, in <module>
NameError: name 'harsha' is not defined
Dans l'exemple ci-dessus, j'essayais simplement d'évaluer l'entrée utilisateur avec la eval
fonction.
Je voudrais ajouter un peu plus de détails à l'explication fournie par tout le monde pour les utilisateurs de python 2 . raw_input()
, qui, à présent, vous savez qu'il évalue les données que l'utilisateur saisit sous forme de chaîne. Cela signifie que python n'essaie même pas de comprendre à nouveau les données saisies. Tout ce qu'il prendra en considération, c'est que les données saisies seront des chaînes, qu'il s'agisse ou non d'une chaîne réelle ou int ou quoi que ce soit.
Alors que input()
d'autre part essaie de comprendre les données saisies par l'utilisateur. Ainsi, l'entrée comme helloworld
afficherait même l'erreur comme ' helloworld is undefined
'.
En conclusion, pour python 2 , pour entrer aussi une chaîne, vous devez la saisir comme ' helloworld
' qui est la structure commune utilisée en python pour utiliser des chaînes.
Si vous voulez vous assurer que votre code s'exécute avec python2 et python3, utilisez la fonction input () dans votre script et ajoutez ceci pour commencer votre script:
from sys import version_info
if version_info.major == 3:
pass
elif version_info.major == 2:
try:
input = raw_input
except NameError:
pass
else:
print ("Unknown python version - input function not safe")