Como posso verificar se uma variável é um número inteiro?
Se você precisa fazer isso, faça
isinstance(<var>, int)
a menos que você esteja em Python 2.x, neste caso você quer
isinstance(<var>, (int, long))
Não utilize o tipo
. Quase nunca é a resposta certa em Python, pois bloqueia toda a flexibilidade do polimorfismo. Por exemplo, se você subclasse int
, sua nova classe deve se registrar como um int
, o que type
não vai servir:
class Spam(int): pass
x = Spam(0)
type(x) == int # False
isinstance(x, int) # True
Isto adere ao forte polimorfismo de Python: você deve permitir qualquer objeto que se comporte como um "não", ao invés de exigir que ele seja um.
A mentalidade clássica de Python, no entanto, é que é mais fácil pedir perdão do que permissão*. Em outras palavras, não verifique se o x
é um inteiro; assuma que é e pegue o resultado da exceção se não for:
try:
x += 1
except TypeError:
...
Esta mentalidade está sendo lentamente superada pelo uso de classes base abstratas, que lhe permite registrar exatamente quais propriedades seu objeto deve ter (adicionando? multiplicando? duplicando?), fazendo-o herdar de uma classe especialmente construída. Essa seria a melhor solução, pois permitirá exatamente aqueles objetos com os atributos necessários e suficientes, mas você terá que ler os documentos sobre como usá-lo.
>>> isinstance(3, int)
True
Veja aqui para mais.
Note que isto não ajuda se você estiver procurando atributos do tipo "não". Neste caso, você também pode querer verificar por long
:
>>> isinstance(3L, (long, int))
True
Já vi cheques deste tipo contra um tipo array/index na fonte Python, mas não acho que isso seja visível fora de C.
Token SO reply: Tens a certeza que devias estar a verificar o seu tipo? Ou não passe um tipo que você não pode lidar, ou não tente ser mais esperto que seus potenciais reutilizadores de código, eles podem ter uma boa razão para não passar uma int para a sua função.
Encontrei uma pergunta relacionada aqui no próprio SO.
Os desenvolvedores Python preferem não verificar os tipos, mas fazer uma operação específica do tipo e pegar uma exceção `TypeError'. Mas se você não sabe o tipo, então você tem o seguinte.
>>> i = 12345
>>> type(i)
<type 'int'>
>>> type(i) is int
True