代码之家  ›  专栏  ›  技术社区  ›  Prometheus

Python 3中的字符串是否高于另一个字符串?[副本]

  •  0
  • Prometheus  · 技术社区  · 10 年前

    在Python 3中,如果一个包含版本号的字符串高于另一个包含版号的字符串,请进行计算。

    这就是我所尝试的:

    request_version = "1.10.1"
    current_version = "1.11"
    if Decimal(request_version) > Decimal(current_version):
        pass
    

    然而,我得到了这个错误,为什么?

    InvalidOperation at /api/version/
    [<class 'decimal.ConversionSyntax'>]
    
    2 回复  |  直到 10 年前
        1
  •  4
  •   val    10 年前

    您正在尝试将版本字符串转换为float,但失败的原因是 1.2.3 不是有效的浮点。

    这种事情你可能想要的是 packaging 包,它实现 PEP 440 版本语义(以及其他细节):

    >>> from packaging.version import parse
    >>> request_version = parse("1.10.1")
    >>> current_version = parse("1.11")
    >>> request_version > current_version
    False
    >>> request_version < current_version
    True
    

    这 parse 将创建一个 Version 对象,它允许在版本之间进行比较

        2
  •  1
  •   ferdy    10 年前

    您可能想使用 LooseVersion 从…起 distutils.version :

    from distutils.version import LooseVersion as V
    
    current = V('1.10.1')
    request_version = V('1.11')
    
    if current < request_version:
        print("Yay.")