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 information doit être strictement un entier ou une chaîne, selon la situation.
Cependant, quoi que vous tapiez dans Python en utilisant raw_input () est en fait une chaîne, peu importe quoi, donc plus précisément, comment pourrais-je bientôt et sans essayer ... sauf à voir si une variable est faite de chiffres ou de caractères?
À 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 de demander pardon.
Testez explicitement s'il n'y a que des chiffres dans la chaîne:
value.isdigit()
str.isdigit()
renvoie True
uniquement si tous les caractères de la chaîne sont des chiffres (0
- 9
).
L'équivalent de type unicode
/Python 3 str
est unicode.isdecimal()
/ str.isdecimal()
; seules les décimales Unicode peuvent être converties en nombres entiers, car tous les chiffres n'ont pas une valeur entière réelle ( U + 00B2 SUPERSCRIPT 2 est un chiffre, mais pas une décimale, par exemple).
Cela s'appelle souvent l'approche Demander l'autorisation, ou Regarder avant de sauter.
Ce dernier ne détectera pas toutes les valeurs int()
valides, car les espaces et +
Et -
Sont également autorisés dans les valeurs int()
. Le premier formulaire acceptera avec plaisir ' +10 '
Comme un nombre, le dernier non.
Si vous vous attendez à ce que l'utilisateur entre normalement saisisse un entier, utilisez le premier formulaire. Il est plus facile (et plus rapide) de demander pardon plutôt que de demander une 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 informations de raw_input
>>>x=raw_input('enter thing:')
enter thing: 3
>>>try: x = int(x)
except: pass
>>>isinstance(x,int)
True
La isdigit
méthode du str
type renvoie True
si et seulement si la chaîne donnée n’est qu’un ou plusieurs chiffres. Si ce n'est pas le cas, vous savez que la chaîne doit être traitée comme une simple chaîne.
Selon votre définition de "bref", vous pouvez utiliser l'une des options suivantes:
try: int(your_input); except ValueError: # ...
your_input.isdigit()
parse
qui est un peu l'opposé de format
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