Comment vérifier si une variable est un entier ou une chaîne? [dupliquer]
Cette question a déjà une réponse ici:
J'ai une application qui a quelques commandes. Lorsque vous tapez une certaine commande, vous devez taper des informations supplémentaires sur quelque chose/quelqu'un. Maintenant cette info doit être strictement un entier ou une chaîne, en fonction de la situation.
Cependant, tout ce que vous tapez en Python en utilisant raw_input () est en fait une chaîne, quoi qu'il arrive, donc plus précisément, comment le ferais-je rapidement et sans essayer...sauf voir si une variable est faite de chiffres ou de caractères?
5 réponses
, À mon avis, vous avez deux options:
-
Essayez simplement de le convertir en
int
, mais attrapez l'exception:try: value = int(value) except ValueError: pass # it was a string, not an int.
C'est L'approche demander pardon.
-
Testez explicitement s'il n'y a que des chiffres dans la chaîne:
value.isdigit()
str.isdigit()
retourneTrue
seulement si tous les caractères de la chaîne sont des chiffres (0
-9
).Le
unicode
/ Python 3str
type équivalent estunicode.isdecimal()
/str.isdecimal()
; seulement Unicode les décimales peuvent être converties en entiers, car tous les chiffres n'ont pas de valeur entière réelle ( U + 00B2 Exposant 2 est un chiffre, mais pas une décimale, par exemple).Ceci est souvent appelé L'approche Ask Permission, ou regardez avant de sauter.
Ce dernier ne détecte pas toutes valides int()
valeurs, comme les espaces et les +
et -
sont également autorisés dans int()
valeurs. La première forme acceptera volontiers ' +10 '
comme un nombre, ce dernier ne le fera pas.
Si votre attendez - vous à ce que l'utilisateur normalement entre un entier, utilisez le premier formulaire. Il est plus facile (et plus rapide) de demander pardon plutôt que d'obtenir la permission dans ce cas.
Si vous voulez vérifier ce que c'est:
>>>isinstance(1,str)
False
>>>isinstance('stuff',str)
True
>>>isinstance(1,int)
True
>>>isinstance('stuff',int)
False
Si vous voulez obtenir des ints à partir de raw_input
>>>x=raw_input('enter thing:')
enter thing: 3
>>>try: x = int(x)
except: pass
>>>isinstance(x,int)
True
Le isdigit
méthode du type str
retourne True
si la chaîne donnée n'est rien d'autre qu'un ou plusieurs chiffres. Si ce n'est pas le cas, vous savez que la chaîne doit être traitée comme une chaîne.
Ne vérifie pas. Allez-y et supposez que c'est la bonne entrée, et attrapez une exception si ce n'est pas le cas.
intresult = None
while intresult is None:
input = raw_input()
try: intresult = int(input)
except ValueError: pass
Selon votre définition de shortly, vous pouvez utiliser l'une des options suivantes:
try: int(your_input); except ValueError: # ...
your_input.isdigit()
- utiliser une expression rationnelle
- utiliser
parse
ce qui est un peu le contraire deformat