python - 在 Python 2.7 和 3.x 中检查变量是 int 还是 long
问题描述
我想对适用于 Python 2.7 及更高版本的 API 函数进行输入类型检查。API 采用自纪元以来以毫秒为单位的时间戳作为其参数。我需要确保输入是正数。
根据值,Python 2.7 将时间戳表示为 aninteger
或 a long
。所以类型检查看起来像这样:
isinstance(timestamp, (int, long))
但是,该long
类型已与int
Python 3 合并。事实上,long 类型不再存在。所以上面的行会导致异常。相反,检查将如下所示:
isinstance(timestamp, int)
为了与 Python 2.7 兼容,我尝试将时间戳转换为 int。long
但是,如果值超出范围,强制转换操作仍会返回 a integer
。这意味着对于 . 之后的任何时间戳,检查都将失败Sun Jan 25 1970 20:31:23
。另请参阅此问题的答案。
使它成为适用于两个 Python 版本的通用检查的最佳方法是什么?
解决方案
检查任何整数,使用numbers.Integral
:
isinstance(timestamp, numbers.Integral)
推荐阅读
- ios - 代表不再被称为 swift
- java - 如何在 n 秒后停止 Swing Timer?
- javascript - 有没有办法使用 cm.getDoc() 获取当前文档,然后使用 cm.swapDoc() 插入该文档?
- java - 无法在串口和spring boot之间建立连接
- javascript - 如何在strapi中实现mongodb的自动增量?
- javascript - 用户输入未正确存储在数组中
- python - 属性和字段有什么区别?
- asp.net - Razor 页面 foreach 填充网格
- python - 如何将 .findall() 函数用于遍历列的所有行的 excel 文件?
- flex-lexer - 奇怪的词法问题关键字与标识符正则表达式匹配