执行CAFE配套报告分析Python脚本触发int()转换ValueError
CAFE配套分析脚本报错定位与解决
报错原因
- 直接触发点:脚本第192行尝试执行整数转换时,拿到了带下划线的字符串
'6_0',Python的int()方法无法识别包含非数字字符的字符串,因此抛出转换错误。 - 根本原因是脚本与当前使用的CAFE版本输出格式不匹配:
- 这套
cafetutorial_report_analysis.py最初是为旧版CAFE v3.x版本编写的,对应旧版内部节点的字段格式为_[基因计数](例如_8),因此脚本第170行的处理逻辑是截掉字符串第一个字符(也就是开头的前导下划线),得到纯数字的计数值完成后续整数转换。 - 你当前使用的CAFE 5版本(即官方cafetutorial教程对应的配套版本),输出的内部节点字段格式已经更新为
_[基因计数]_[统计支持值](比如报错中的_6_0,其中6是实际的祖先基因计数,后面的0是节点统计的支持值标记)。脚本仅完成了去掉开头第一个下划线的操作,剩下的6_0没有进一步拆分提取纯计数值,最终触发整数转换失败。 - 根节点、末端节点的处理逻辑不受这个问题影响——脚本对这两类节点是直接从树标签末尾按最后一个下划线拆分提取计数值,和新版CAFE输出格式完全匹配,仅内部节点的处理逻辑存在兼容缺口。
- 这套
修复方案
- 定位到脚本第170行的原始代码:
tlinfo[tlnode][4] = tlinfo[tlnode][4][1:]; - 替换为适配新版CAFE输出的处理逻辑:
# 去除内部节点字段开头的前导下划线,按下划线拆分后仅保留实际基因计数部分 cleaned_raw = tlinfo[tlnode][4][1:] tlinfo[tlnode][4] = cleaned_raw.split("_")[0] - 修改完成后直接重新运行原分析命令即可。这个改动不会改变原有统计逻辑,仅修复了新版CAFE输出格式的适配问题。
- 注意事项:不要直接手动修改
resultfile.cafe原始结果文件去删除下划线,这类操作会破坏CAFE结果的原始结构,后续运行其他配套分析时还会出现格式解析错误,直接修改脚本的兼容逻辑是最稳妥的方案。
内容的提问来源于stack exchange,提问作者HJR
相关产品推荐
相关产品推荐

