Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Déterminer si une saisie est un 'integer' ou une 'string'

+5 votes

Une question de gros débutant : comment évaluer si une saisie 'input()' est un 'int' ou une 'string'?
Je sais pas si c'est pertinent de poser une question aussi naze ou si vous trouvez que ça pollue le site...
Si c est le cas dites-le et j'irai mourir dans un buisson en silence :D

demandé 21-Sep-2015 par uj

Je me rend compte que ma réponse n'est valable qu'en python3. Il serait utile de préciser de quelle version de input() il s'agit.

2 Réponses

+8 votes
 
Meilleure réponse

Il suffit de tester :

var = input()
try:
    var = int(var)
except ValueError:
    pass

Voir ici à propos de la philosophie derrière cette pratique.

répondu 21-Sep-2015 par yoch (2,514 points)

j ai regardé le lien et je vois qu'il y a une opposition entre EAFP et LBYL, le premier étant préférable au second parce que :"
In a multi-threaded environment, the LBYL approach can risk introducing a race condition between “the looking” and “the leaping”. For example, the code, if key in mapping: return mapping[key] can fail if another thread removes key from mapping after the test, but before the lookup. This issue can be solved with locks or by using the EAFP approach."
(si ca peut en aider d'autres)
En tout cas c'est bien ça que je cherchais, je pensais que le try catch était surtout utile pour débugger, la on voit une application pratique merci.

0 votes

En gros

L'idée est simple, on convertit ça en float et on voit, si ça marche, c'est un integer, sinon c'est (si tout se passe bien) une string

Un peu de philosophie

Je sais pas si c'est pertinent de poser une question aussi naze

Je pense qu'aucune question n'est naze, au contraire c'est une question très existentielle, d'ailleurs elle est très souvent sollicitée sur les forums, quel que soit le langage de prog.

OSEF DE TON BALBLA JE VEUX LE CODE POUR COPIER COLLER DANS MON APPLI !

Parlons peu, parlons code :

test2.py :

def is_number(s):
    try:
        float(s)
        return True
    except ValueError:
        return False

print(is_number(3)) # True
print(is_number("ok")) # False
print(is_number("32")) # True

ps : fonctionne aussi bien sur python2 que sur python3

pss : pour plus de lectures : lien1, lien2,, lien3, lien4

répondu 21-Sep-2015 par boblinux (3,092 points)

si ca interesse quelqu'un dans mon cas :
(je considère 'input()' en python 3)


lien 1( le code du gars):

user_input = input("Enter something:")
if type(user_input) == int:
    print("Is a number")
else:
    print("Not a number")

j ai commencé par ca; bien sur ca ne peut pas marcher car input retourne une string


lien 2:

var = input("var: ")
if isinstance(var, str):
    print "var = word"
else:
   print "var = number"

c est ce que j ai essayé en second; ca ne peut pas marcher on est également en présence d'une string donc c est absurde


liens 3 et 4:
outre le try/except on trouve

Use the isdigit() function for string objects.

a = "03523"
a.isdigit()
True

b = "963spam"
b.isdigit()
False

(In Python 3, you can use isdecimal)

ce qui permet de passer par des if plutot qu'un try

après je ne sais pas si l utilisation des if dans ce cas est EAFP ou LBYL, donc si le try est preferable au if ou si c'est kif-kif

https://docs.python.org/3/library/stdtypes.html#str.isdigit

...