我想对在Python 2.7及更高版本中可用的API函数进行输入类型检查。该API以自epoch以来的毫秒数作为其参数。我需要确保输入为正数。
取决于该值,Python 2.7将时间戳记表示为integer
或long
。因此,类型检查将如下所示:
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中都有效的最佳方法是什么?
答案 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