如何处理使用StrictVersion排序含无效字符串的版本列表时的错误
解决版本排序含无效字符串的方案
核心思路
- 自定义排序key函数,加入异常捕获逻辑,区分有效版本和无效字符串
- 给两类值设置不同的排序优先级,控制无效字符串排在列表开头/末尾
- 修正原代码中
list.sort()的使用错误:sort()是原地排序方法,无返回值,直接赋值会导致变量变为None
纯Python实现
首先导入依赖:from distutils.version import StrictVersion
定义排序key函数:
def version_sort_key(version_str): try: # 有效版本优先级设为0,搭配StrictVersion对象实现语义排序 return (0, StrictVersion(version_str)) except ValueError: # 无效字符串优先级设为1,统一排在末尾;要放开头可改为(0, version_str),同时把有效版本的返回值优先级改为1 return (1, version_str)
执行排序:
# 方式1:原地排序,直接修改原列表 ver_list.sort(key=version_sort_key) # 方式2:生成新的排序后列表,不改动原列表 sorted_ver_list = sorted(ver_list, key=version_sort_key)
Pandas场景实现
和上面共用同一个key函数即可,调整索引排序逻辑:
import pandas as pd # ver为索引是版本号的Series ver = ver.reindex(index=pd.Index(sorted(ver.index, key=version_sort_key)))
内容的提问来源于stack exchange,提问作者Sergey Sergeev
相关产品推荐
相关产品推荐

