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?

27
demandé sur bernie 2013-05-10 22:06:01

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() retourne True seulement si tous les caractères de la chaîne sont des chiffres (0-9).

    Le unicode / Python 3 str type équivalent est unicode.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.

56
répondu Martijn Pieters 2014-10-10 08:54:13

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
17
répondu TehTris 2013-05-10 18:11:43

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.

5
répondu jwodder 2013-05-10 18:08:53

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
répondu Marcin 2013-05-10 18:12:54

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 de format
1
répondu Alexei Sholik 2017-05-23 12:02:47