Python将"5.4"但不是"5.4.4"转换为浮点数,这里是什么?

1 python type-conversion syntax-error

我正在写一个通过rpm包执行的脚本,我试图将包的发布版本与命令行提供的两个参数进行比较, - fromVersion和--toVersion.

我这样运行脚本:

python packageSearch.py --package --fromVersion 5.5.0 --toVersion 7.0.0
Run Code Online (Sandbox Code Playgroud)

即使我尝试将命令行参数转换为字符串,我也会得到以下内容:

if ( float(package['version']) >= float(options.fromVersion) and package['version'] <= options.toVersion ): 

ValueError: invalid literal for float(): 7.0.21
Run Code Online (Sandbox Code Playgroud)

我搜索了stackoverflow和谷歌,但我很惊讶,我没有找到任何比较int到浮点数的好例子,或者如果用户键入浮点数,它必须将浮点数与浮点数进行比较.

我也试过没有转换然后它的工作,但比较是错误的.

为什么python在这个语句中说无效语法:

version3 = 5.5.5
File "<stdin>", line 1
version3 = 5.5.5
               ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

但如果我尝试以下内容:

version3 = 5.5
Run Code Online (Sandbox Code Playgroud)

它没有预期的问题.这里发生了什么,为什么我不能将5.5.5分配给变量,以及将可能是整数或浮点数的值与另一个浮点数进行比较的最佳方法是什么,因为将其转换为浮点数(float)不会似乎工作.

Dan*_*man 14

但"5.5.0" 不是浮动.为什么期望Python能够将其转换为一个?版本不是简单的十进制数,版本的任何元素都可以大于10:例如"5.11.35"是完全有效的版本.

您需要将变量拆分为三个单独的整数,并单独进行比较.


dev*_*ull 9

你可以使用distutils.version:

>>> from distutils.version import StrictVersion
>>> fromVersion="5.5.0"
>>> toVersion="7.0.0"
>>> if ( StrictVersion(fromVersion) < StrictVersion(toVersion) ):
...   print "From is less than to version"
... 
From is less than to version
>>> 
Run Code Online (Sandbox Code Playgroud)

编辑:Saying pydoc distutils.version提供了一个更好的文档,与可用的文档相比distutils.version.