web-dev-qa-db-fra.com

Comment vérifier si une variable est un entier ou une chaîne?

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?

33
user2154354

À 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.

67
Martijn Pieters

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
19
TehTris

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.

7
jwodder

Selon votre définition de "bref", vous pouvez utiliser l'une des options suivantes:

2
Alexei Sholik

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
1
Marcin