TypeError: '<' not supported between instances of 'str' and 'int' in version numbers

TypeError: '<' not supported between instances of 'str' and 'int' in version numbers

我有以下代码会引发错误,我不明白为什么会这样,如果您将项目“2.0.8”更改为“2.1.8”,错误就会消失。即使您将项目“2.0.8”更改为“3.1.8”,它也能正常工作,有什么建议吗?

from distutils.version import LooseVersion
versions_list = ['2.5.6.RC02', '2.0.8', '2.0-m2']
versions_list.sort(key=LooseVersion, reverse=False)

print(versions_list) 

TypeError:'str' 和 'int'

实例之间不支持“<”

是的。第一个不相关 -- 最后两个足以证明问题。

sorted(['2.1.8', '2.1-m2'], key=LooseVersion)  # fails
sorted(['8', 'm2'], key=LooseVersion)  # fails

解释 TypeError 的一种方法是 "the two versions are not comparable",即 一个或另一个应该先出现是不确定的。

我们正在进行三项比较: 2 == 21 == 1,最后我们想知道 8'm2' 相比如何。 最后一个是事情分崩离析的地方。 请注意,我们不按 ASCII 顺序进行比较, 因为我们 真的 想要 9 < 11 而不是相反。 整数比较与字符串比较完全不同。 当您调整它以在中间显示 01 时, 你短路了比较程序, 允许它在检查所有组件之前报告答案。

如果抓到 TypeError 并报告 "indeterminate" 对您来说不够好, 那么我想我会建议清理版本组件 在将它们交给 LooseVersion.

之前