Pourquoi Python eval(input(“Entrez entrée: ”)) changement d'entrée du type de données?
En Python 3, j'écris une simple commande pour accepter un nombre entier saisi par l'utilisateur ainsi:
x = int(input("Enter a number: "))
Si je saute le int()
partie et utilisez simplement x = input("Enter a number: ")
, mon entrée type de données est une chaîne de caractères, un entier. Je comprends que.
Cependant, si j'utilise la commande suivante:
x = eval(input("Enter a number: "))
l'entrée du type de données est "int".
Pourquoi cela se produit?
peut-être que c'est une dynamique de type case lorsque vous utilisez la fonction eval()?
eval
traite l'entrée comme il a été écrit dans le code, de faire x = 3
dans code fait d'un nombre entier, donc x = eval("3")
fera aussi x un entier, cependant, de laisser à l'utilisateur d'entrer un code arbitraire en entrée peut être un énorme problème, si ils ont tapé dans open(__file__,'w').close()
il serait de supprimer l'exécution de fichier.OriginalL'auteur lebowski | 2016-06-19
Vous devez vous connecter pour publier un commentaire.
x = eval(input("Enter a number: "))
n'est pas la même chose quex = eval('input("Enter a number: ")')
L'ex-première appels
input(...)
, obtient une chaîne de caractères, par exemple'5'
puis les évalue, c'est pourquoi vous obtenez uneint
, de cette manière:Tandis que le second (plus en adéquation avec ce que vous attendiez), évalue l'expression
'input("Enter a number: ")'
OriginalL'auteur bakkal
En raison d'un nombre est une expression valide en Python, et il évalue à lui-même (et il est de type int). Par exemple, si vous entrez une poubelle chaîne avec un non-existant nom (par exemple, 'abcdefgh'), un NameError exception sera levée (l'exception est soulevée pendant l'évaluation).
OriginalL'auteur Pavel Gurkov