Identifier le type de données d'une entrée
Salut, je suis en train d'imprimer le type de données d'une entrée de l'utilisateur et de produire un tableau comme suit:
ABCDEFGH = Chaîne de caractères,
1.09 = float, 0 = int, vrai = bool
etc.
Je suis à l'aide de python 3.2.3 et je sais que je pourrais utiliser le type() pour obtenir le type de données, mais en python toutes les entrées de l'utilisateur sont prises comme des chaînes de caractères et je ne sais pas comment faire pour déterminer si l'entrée est une chaîne ou une valeur Booléenne ou integer ou float. Voici la partie du code:
user_var = input("Please enter something: ")
print("you entered " + user_var)
print(type(user_var))
qui revient toujours str pour la chaîne.
D'apprécier l'aide
OriginalL'auteur Apeiron Kambyses | 2014-03-05
Vous devez vous connecter pour publier un commentaire.
Veuillez vérifier mes mises à jour répondre 🙂
Le problème semble être que les "essayer" instructions sont ignorés et rien de ce qui est à l'intérieur d'énoncés est imprimé
Pouvez vous s'il vous plaît mettre à jour à la question de la modification de votre code?
Faire de valeurs booléennes ont un capital initial de lettres?
OriginalL'auteur thefourtheye
input()
renvoie toujours une chaîne de caractères. Si vous voulez voir si il est possible d'être convertie en un nombre entier, il faut faire:Vous pouvez écrire une fonction comme ceci:
Cependant, comme mentionné dans les autres réponses, à l'aide de
ast.literal_eval
serait un plus concis solution.Oui, vous avez à faire.
bool(s)
estTrue
pour chaque chaîne non vide. Sansliteral_eval
vous auriez à utiliser une comparaison de chaîne pour"True"
et"False"
.Merci tout le monde. Vous avez tous été très utile
OriginalL'auteur Tom Leese
Entrée renvoie toujours une chaîne de caractères. Vous devez évaluer la chaîne pour obtenir Python valeur:
Si vous voulez de la sécurité (ici l'utilisateur peut exécuter du code arbitraire), vous devez utiliser
ast.literal_eval
:I'm using python 3.2.3
C'est très dangereux si l'entrée utilisateur est
import os; os.system("rm -rf *")
.non, il n'est pas, vous pensez probablement d'
exec
et paseval
Ok, vous avez raison que vous ne seriez pas en mesure de
import os
, mais vous pouvez toujours exécuteros.system("rm -rf *")
si elle a déjà été importé.Leese: voir mon edit. Je n'ai pas écrit d'abord parce que je ne me souviens pas avec module de la
literal_eval
fonction a été.OriginalL'auteur hivert