如何检查一个变量是否为整数?
如果你需要这样做,请做
isinstance(, int)
除非你是在Python 2.x中,在这种情况下你需要
isinstance(, (int, long))
不要使用 type。在Python中,这几乎不是正确的答案,因为它阻止了多态性的所有灵活性。例如,如果你将 int 子类化,你的新类应该注册为 int,而 type 不会这样做。
type
int
class Spam(int): pass x = Spam(0) type(x) == int # False isinstance(x, int) # True
这坚持了Python的强多态性:你应该允许任何表现得像`int'的对象,而不是强制要求它是一个。
经典的 Python 心态是,请求原谅比请求允许更容易。换句话说,不要检查 x 是否是一个整数;假设它是,如果它不是,则捕捉异常结果。
x
try: x += 1 except TypeError: ...
这种心态正慢慢被抽象基类的使用所取代,它可以让你准确地注册你的对象应该有哪些属性(加法、乘法、加倍?这将是最好的解决方案,因为它将允许确切地那些具有必要和充分属性的对象,但你必须阅读关于如何使用它的文档。
>>> isinstance(3, int) True
更多内容见这里。
请注意,如果你要找的是int类属性,这就没有帮助。在这种情况下,你可能还想检查一下long。
long
>>> isinstance(3L, (long, int)) True
我在Python源中看到过这种针对数组/索引类型的检查,但我认为这在C语言之外是不可见的。
Token SO回复:你确定你应该检查它的类型吗?要么就不要传递你无法处理的类型,要么就不要试图智取你潜在的代码重用者,他们可能有充分的理由不向你的函数传递int。
在SO自己这里发现了一个相关问题。
Python开发者喜欢不检查类型,而是做一个特定类型的操作,然后捕获一个`类型错误'的异常。但是如果你不知道类型,那么你有以下情况。
>>> i = 12345 >>> type(i) >>> type(i) is int True
如果你需要这样做,请做
除非你是在Python 2.x中,在这种情况下你需要
不要使用
type
。在Python中,这几乎不是正确的答案,因为它阻止了多态性的所有灵活性。例如,如果你将int
子类化,你的新类应该注册为int
,而type
不会这样做。这坚持了Python的强多态性:你应该允许任何表现得像`int'的对象,而不是强制要求它是一个。
BUT
经典的 Python 心态是,请求原谅比请求允许更容易。换句话说,不要检查
x
是否是一个整数;假设它是,如果它不是,则捕捉异常结果。这种心态正慢慢被抽象基类的使用所取代,它可以让你准确地注册你的对象应该有哪些属性(加法、乘法、加倍?这将是最好的解决方案,因为它将允许确切地那些具有必要和充分属性的对象,但你必须阅读关于如何使用它的文档。
更多内容见这里。
请注意,如果你要找的是
int
类属性,这就没有帮助。在这种情况下,你可能还想检查一下long
。我在Python源中看到过这种针对数组/索引类型的检查,但我认为这在C语言之外是不可见的。
Token SO回复:你确定你应该检查它的类型吗?要么就不要传递你无法处理的类型,要么就不要试图智取你潜在的代码重用者,他们可能有充分的理由不向你的函数传递int。
在SO自己这里发现了一个相关问题。
Python开发者喜欢不检查类型,而是做一个特定类型的操作,然后捕获一个`类型错误'的异常。但是如果你不知道类型,那么你有以下情况。