在Python3中,一个字符串是否高于另一个字符串?

在Python3中,一个字符串是否高于另一个字符串?,python,python-3.x,Python,Python 3.x,在Python3中,如果一个包含版本号的字符串高于另一个包含版本号的字符串,则进行训练 这就是我尝试过的: request_version = "1.10.1" current_version = "1.11" if Decimal(request_version) > Decimal(current_version): pass 然而,我得到这个错误,为什么 InvalidOperation at /api/version/ [<class 'decimal.Conver

在Python3中,如果一个包含版本号的字符串高于另一个包含版本号的字符串,则进行训练

这就是我尝试过的:

request_version = "1.10.1"
current_version = "1.11"
if Decimal(request_version) > Decimal(current_version):
    pass
然而,我得到这个错误,为什么

InvalidOperation at /api/version/
[<class 'decimal.ConversionSyntax'>]
invalidOperationat/api/version/
[]

您试图将版本字符串转换为浮点数,但由于
1.2.3
不是有效的浮点数,因此转换失败

对于这类事情,您可能需要的是实现版本语义(以及其他细节)的包:

来自packaging.version导入解析的
>>
>>>请求_version=parse(“1.10.1”)
>>>当前版本=解析(“1.11”)
>>>请求\u版本>当前\u版本
假的
>>>请求\u版本<当前\u版本
真的

解析
将创建一个
版本
对象,该对象允许在版本之间进行比较

您试图将版本字符串转换为浮点数,但由于
1.2.3
不是有效的浮点数,因此转换失败

对于这类事情,您可能需要的是实现版本语义(以及其他细节)的包:

来自packaging.version导入解析的
>>
>>>请求_version=parse(“1.10.1”)
>>>当前版本=解析(“1.11”)
>>>请求\u版本>当前\u版本
假的
>>>请求\u版本<当前\u版本
真的

解析
将创建一个
版本
对象,该对象允许在版本之间进行比较

您可能希望从
distutils使用
版本
。版本

from distutils.version import LooseVersion as V

current = V('1.10.1')
request_version = V('1.11')

if current < request_version:
    print("Yay.")
从distutils.version导入版本为V
电流=V('1.10.1')
请求_版本=V('1.11')
如果当前
您可能需要使用
distutils.version
中的
LooseVersion

from distutils.version import LooseVersion as V

current = V('1.10.1')
request_version = V('1.11')

if current < request_version:
    print("Yay.")
从distutils.version导入版本为V
电流=V('1.10.1')
请求_版本=V('1.11')
如果当前
Youe示例适用于Meit它实际上适用于我…不,很好:。你确定你没有尝试发布补丁(例如
1.2.3
)或其他什么吗?另外,请注意,版本之间没有数字上的比较-
1.2
1.11
更新,即使它是一个更大的数字,例如。那么:1。答案显而易见(“为什么?”——因为
1.10.1
不是一个有效数字);及:2。您仍然会遇到这样一个问题:将它们作为数字进行比较恰恰是错误的方法。版本字符串不是十进制数字!使用专门用于比较版本字符串的函数。您的示例适用于meits,实际上适用于我…不,很好:。你确定你没有尝试发布补丁(例如
1.2.3
)或其他什么吗?另外,请注意,版本之间没有数字上的比较-
1.2
1.11
更新,即使它是一个更大的数字,例如。那么:1。答案显而易见(“为什么?”——因为
1.10.1
不是一个有效数字);及:2。您仍然会遇到这样一个问题:将它们作为数字进行比较恰恰是错误的方法。版本字符串不是十进制数字!使用专门用于比较版本字符串的函数。