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 == 2
、1 == 1
,最后我们想知道 8
与 'm2'
相比如何。
最后一个是事情分崩离析的地方。
请注意,我们不按 ASCII 顺序进行比较,
因为我们 真的 想要 9 < 11
而不是相反。
整数比较与字符串比较完全不同。
当您调整它以在中间显示 0
或 1
时,
你短路了比较程序,
允许它在检查所有组件之前报告答案。
如果抓到 TypeError
并报告 "indeterminate" 对您来说不够好,
那么我想我会建议清理版本组件
在将它们交给 LooseVersion
.
之前
我有以下代码会引发错误,我不明白为什么会这样,如果您将项目“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 == 2
、1 == 1
,最后我们想知道 8
与 'm2'
相比如何。
最后一个是事情分崩离析的地方。
请注意,我们不按 ASCII 顺序进行比较,
因为我们 真的 想要 9 < 11
而不是相反。
整数比较与字符串比较完全不同。
当您调整它以在中间显示 0
或 1
时,
你短路了比较程序,
允许它在检查所有组件之前报告答案。
如果抓到 TypeError
并报告 "indeterminate" 对您来说不够好,
那么我想我会建议清理版本组件
在将它们交给 LooseVersion
.