检查Python 2.7和3.x中的变量是int还是long

时间:2018-08-17 10:11:05

标签: python python-3.x python-2.7

我想对在Python 2.7及更高版本中可用的API函数进行输入类型检查。该API以自epoch以来的毫秒数作为其参数。我需要确保输入为正数。

取决于该值,Python 2.7将时间戳记表示为integerlong。因此,类型检查将如下所示:

isinstance(timestamp, (int, long)) 

但是,对于Python 3,long类型与int合并了。实际上,long类型不再存在。因此,上述行将导致异常。取而代之的是,支票看起来像这样:

isinstance(timestamp, int) 

为了与Python 2.7兼容,我尝试将时间戳转换为int。但是,如果值超出long范围,则强制转换操作仍返回integer。这意味着检查将在Sun Jan 25 1970 20:31:23之后的任何时间戳记中失败。另请参阅this question的答案。

使此通用检查在两个版本的Python中都有效的最佳方法是什么?

5 个答案:

答案 0 :(得分:5)

对任何整数进行检查,请使用numbers.Integral

isinstance(timestamp, numbers.Integral)

答案 1 :(得分:1)

或遵循此cheat sheet获取python 2-3兼容代码

只需安装future软件包:pip install future

# Python2
>>> x = 9999999999999999999999L
>>> isinstance(x, int)
False
>>> from builtins import int
>>> isinstance(x, int)
True

答案 2 :(得分:0)

如果您要检查变量的类型完全是否等于整数,则只需使用type()函数即可:

import sys
if sys.version_info >= (3,0):
    long = int

type(v) in (int, long)

答案 3 :(得分:0)

list_features包中借用:

six

然后您可以通过

进行检查
import sys

PY3 = sys.version_info[0] == 3

if PY3:
    integer_types = (int,)
else:
    integer_types = (long, int)

long_type = integer_types[0]

并使用

进行投射
if isinstance(value, integer_types):

答案 4 :(得分:-1)

# This will works in both Python2, Python3
# Just check type of the variable and compare
import time
timestamp = time.time()

type(timestamp) == int
type(timestamp) == float