Hur kontrollerar jag om en variabel är ett heltal?
Om du behöver göra detta, gör följande
isinstance(<var>, int)
såvida du inte använder Python 2.x, i vilket fall du vill ha
isinstance(<var>, (int, long))
Använd inte type
. Det är nästan aldrig rätt svar i Python, eftersom det blockerar all flexibilitet hos polymorfism. Om du till exempel underklassar int
ska din nya klass registrera sig som en int
, vilket type
inte gör:
class Spam(int): pass
x = Spam(0)
type(x) == int # False
isinstance(x, int) # True
Detta följer Pythons starka polymorfism: du bör tillåta alla objekt som beter sig som en int
, istället för att kräva att det ska vara en int
.
Den klassiska Python-mentaliteten är dock att det är lättare att be om förlåtelse än om lov. Med andra ord, kontrollera inte om x
är ett heltal; anta att det är det och fånga upp undantaget om det inte är det:
try:
x += 1
except TypeError:
...
Denna mentalitet håller långsamt på att tas över av användningen av abstrakta basklasser, som låter dig registrera exakt vilka egenskaper ditt objekt ska ha (addera? multiplicera? fördubbla?) genom att låta det ärva från en speciellt konstruerad klass. Det skulle vara den bästa lösningen, eftersom den tillåter exakt dessa objekt med de nödvändiga och tillräckliga attributen, men du måste läsa dokumentationen om hur du använder den.
>>> isinstance(3, int)
True
Se här för mer information.
Observera att detta inte hjälper om du letar efter int
-liknande attribut. I det fallet kanske du också vill kontrollera om det finns long
:
>>> isinstance(3L, (long, int))
True
Jag har sett kontroller av det här slaget mot en array/index-typ i Pythons källkod, men jag tror inte att det är synligt utanför C.
Token SO-svar: Är du säker på att du ska kontrollera dess typ? Antingen lämnar du inte över en typ som du inte kan hantera, eller så försöker du inte överlista dina potentiella kodåteranvändare, de kan ha en bra anledning att inte lämna över en int till din funktion.
Jag hittade en [relaterad fråga] (https://stackoverflow.com/questions/402504/how-to-determine-the-variable-type-in-python) här på SO själv.
Python-utvecklare föredrar att inte kontrollera typer utan att göra en typspecifik operation och fånga upp ett TypeError
-undantag. Men om du inte känner till typen har du följande.
>>> i = 12345
>>> type(i)
<type 'int'>
>>> type(i) is int
True