首页 > 解决方案 > 在 Python 2.7 和 3.x 中检查变量是 int 还是 long

问题描述

我想对适用于 Python 2.7 及更高版本的 API 函数进行输入类型检查。API 采用自纪元以来以毫秒为单位的时间戳作为其参数。我需要确保输入是正数。

根据值,Python 2.7 将时间戳表示为 aninteger或 a long。所以类型检查看起来像这样:

isinstance(timestamp, (int, long)) 

但是,该long类型已与intPython 3 合并。事实上,long 类型不再存在。所以上面的行会导致异常。相反,检查将如下所示:

isinstance(timestamp, int) 

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

使它成为适用于两个 Python 版本的通用检查的最佳方法是什么?

标签: pythonpython-3.xpython-2.7

解决方案


检查任何整数,使用numbers.Integral

isinstance(timestamp, numbers.Integral)

推荐阅读