You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snakemake教程执行报错:AttributeError: 'str'对象无'name'属性

问题:Snakemake教程执行snakemake -np mapped_reads/A.bam时触发AttributeError错误

严格按照Snakemake基础教程搭建环境、编写Snakefile后,执行预览命令snakemake -np mapped_reads/A.bam时出现如下错误:

snakemake -np mapped_reads/A.bam
Building DAG of jobs...
Traceback (most recent call last):
  File "/home/jeremi1504/mambaforge/envs/snakemake-tutorial/lib/python3.8/site-packages/snakemake/__init__.py", line 701, in snakemake
    success = workflow.execute(
  File "/home/jeremi1504/mambaforge/envs/snakemake-tutorial/lib/python3.8/site-packages/snakemake/workflow.py", line 1066, in execute
    logger.run_info("\n".join(dag.stats()))
  File "/home/jeremi1504/mambaforge/envs/snakemake-tutorial/lib/python3.8/site-packages/snakemake/dag.py", line 2191, in stats
    yield tabulate(rows, headers="keys")
  File "/home/jeremi1504/mambaforge/envs/snakemake-tutorial/lib/python3.8/site-packages/tabulate/__init__.py", line 2048, in tabulate
    list_of_lists, headers = _normalize_tabular_data(
  File "/home/jeremi1504/mambaforge/envs/snakemake-tutorial/lib/python3.8/site-packages/tabulate/__init__.py", line 1471, in _normalize_tabular_data
    rows = list(map(lambda r: r if _is_separating_line(r) else list(r), rows))
  File "/home/jeremi1504/mambaforge/envs/snakemake-tutorial/lib/python3.8/site-packages/tabulate/__init__.py", line 1471, in <lambda>
    rows = list(map(lambda r: r if _is_separating_line(r) else list(r), rows))
  File "/home/jeremi1504/mambaforge/envs/snakemake-tutorial/lib/python3.8/site-packages/tabulate/__init__.py", line 107, in _is_separating_line
    (len(row) >= 1 and row[0] == SEPARATING_LINE)
  File "/home/jeremi1504/mambaforge/envs/snakemake-tutorial/lib/python3.8/site-packages/snakemake/rules.py", line 1138, in __eq__
    return self.name == other.name and self.output == other.output
AttributeError: 'str' object has no attribute 'name'

错误原因

这个错误是tabulate库版本与当前Snakemake版本不兼容导致的。Snakemake在生成DAG任务统计信息时,tabulate的_is_separating_line函数会将Snakemake的Rule对象与字符串常量做比较,新版本tabulate的逻辑和旧版Snakemake的Rule对象比较逻辑不匹配,触发了AttributeError。

教程本身没有损坏,是因为依赖库版本漂移——教程的环境配置通常不会锁定所有依赖的精确版本,随着tabulate库更新,出现了兼容性冲突。

解决方法

方法一:降级tabulate到兼容版本

安装与当前Snakemake兼容的tabulate版本(比如0.8.10):

pip install tabulate==0.8.10

方法二:升级Snakemake到修复该问题的版本

如果教程允许,升级Snakemake到已经修复该兼容性问题的新版本:

mamba install -c bioconda snakemake==7.32.4  # 可替换为更新的稳定版

方法三:临时绕过统计信息生成

添加--quiet参数跳过统计信息生成,临时解决问题(会隐藏部分日志):

snakemake -np --quiet mapped_reads/A.bam

不需要安装额外依赖,只需调整现有依赖版本即可解决问题。

内容的提问来源于stack exchange,提问作者galojzybarbanach

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 16:55:29