Kontroll av om en variabel er et heltall eller ikke

Hvordan sjekker jeg om en variabel er et heltall?

Løsning

Hvis du trenger å gjøre dette, gjør du

isinstance(, int)

med mindre du er i Python 2.x, i hvilket tilfelle du vil ha

isinstance(, (int, long))

Ikke bruk type. Det er nesten aldri det riktige svaret i Python, siden det blokkerer all fleksibiliteten til polymorfisme. For eksempel, hvis du underklasse int, bør den nye klassen registreres som en int, noe type ikke vil gjøre:

class Spam(int): pass
x = Spam(0)
type(x) == int # False
isinstance(x, int) # True

Dette følger Python&# 39s sterke polymorfisme: du bør tillate ethvert objekt som oppfører seg som en int, i stedet for å kreve at det skal være en.

MEN

Den klassiske Python-mentaliteten er imidlertid at det er lettere å be om tilgivelse enn tillatelse . Med andre ord, ikke sjekk om x er et heltall; anta at det er det og fang unntaksresultatene hvis det ikke er det:

try:
    x += 1
except TypeError:
    ...

Denne mentaliteten blir sakte overtatt av bruken av abstrakte basisklasser, som lar deg registrere nøyaktig hvilke egenskaper objektet ditt skal ha (legge til? multiplisere? doble?) ved å få det til å arve fra en spesialkonstruert klasse. Det ville være den beste løsningen, siden det vil tillate nøyaktig de objektene med de nødvendige og tilstrekkelige attributtene, men du må lese dokumentasjonen om hvordan du bruker det.

Kommentarer (14)
>>> isinstance(3, int)
True

Se her for mer informasjon.

Merk at dette ikke hjelper hvis du leter etter int-lignende attributter. I dette tilfellet kan det også være lurt å se etter long:

>>> isinstance(3L, (long, int))
True

Jeg har sett sjekker av denne typen mot en array / indekstype i Python-kilden, men jeg tror ikke det er synlig utenfor C.

Token SO-svar: Er du sikker på at du skal sjekke typen? Enten ikke send en type du ikke kan håndtere, eller ikke prøv å overliste potensielle gjenbrukere av koden din, de kan ha en god grunn til ikke å sende en int til funksjonen din.

Kommentarer (8)

Fant et relatert spørsmål her på SO selv.

Python-utviklere foretrekker å ikke sjekke typer, men gjøre en typespesifikk operasjon og fange et TypeError unntak. Men hvis du ikke kjenner typen, har du følgende.

>>> i = 12345
>>> type(i)

>>> type(i) is int
True
Kommentarer (3)