如何使用sys.version_info比较Python版本及解决等值判断异常问题
问题1:为什么 ver > (3, 7, 11) 返回True
sys.version_info 不是普通的三元组,是包含5个元素的特殊序列,完整结构为 (major, minor, micro, releaselevel, serial)。你输出的版本完整值为 (3, 7, 11, 'final', 0)。
Python对不同长度的序列做比较时,会按位置逐个对比元素,当前面的元素全部相等时,长度更长的序列会被判定为更大。你用来比较的(3,7,11)只有3个元素,前三个对比相等后,更长的ver就会被判定为大于(3,7,11)。
问题2:正确的版本相等测试方法
根据你的使用场景,有两种常用方案:
- 仅需要对比主版本、次版本、修订号(绝大多数场景的需求):取
sys.version_info的前三位切片对比即可
这种方式也可以兼容大小比较,调整后# 测试是否为3.7.11版本,忽略发布级别和序列号 ver[:3] == (3, 7, 11)ver[:3] > (3,7,11)就会正确返回False。 - 需要完整匹配所有版本参数:对比时补全所有5个字段即可
ver == (3, 7, 11, 'final', 0)
内容的提问来源于stack exchange,提问作者James Lin
相关产品推荐
相关产品推荐

