检查一个变量是否为整数

如何检查一个变量是否为整数?

解决办法

如果你需要这样做,请做

isinstance(, int)

除非你是在Python 2.x中,在这种情况下你需要

isinstance(, (int, long))

不要使用 type。在Python中,这几乎不是正确的答案,因为它阻止了多态性的所有灵活性。例如,如果你将 int 子类化,你的新类应该注册为 int,而 type 不会这样做。

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

这坚持了Python的强多态性:你应该允许任何表现得像`int'的对象,而不是强制要求它是一个。

BUT

经典的 Python 心态是,请求原谅比请求允许更容易。换句话说,不要检查 x 是否是一个整数;假设它是,如果它不是,则捕捉异常结果。

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

这种心态正慢慢被抽象基类的使用所取代,它可以让你准确地注册你的对象应该有哪些属性(加法、乘法、加倍?这将是最好的解决方案,因为它将允许确切地那些具有必要和充分属性的对象,但你必须阅读关于如何使用它的文档。

评论(14)
>>> isinstance(3, int)
True

更多内容见这里

请注意,如果你要找的是int类属性,这就没有帮助。在这种情况下,你可能还想检查一下long

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

我在Python源中看到过这种针对数组/索引类型的检查,但我认为这在C语言之外是不可见的。

Token SO回复:你确定你应该检查它的类型吗?要么就不要传递你无法处理的类型,要么就不要试图智取你潜在的代码重用者,他们可能有充分的理由不向你的函数传递int。

评论(8)

在SO自己这里发现了一个相关问题

Python开发者喜欢不检查类型,而是做一个特定类型的操作,然后捕获一个`类型错误'的异常。但是如果你不知道类型,那么你有以下情况。

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

>>> type(i) is int
True
评论(3)