Snakemake执行BaseRecalibrator规则时报TypeError: all()无关键字参数求助
Snakemake运行报错:TypeError: all() takes no keyword arguments
报错日志
Using shell: /usr/bin/bash Provided remote nodes: 21 Job stats: job count ---------------- ------- BaseRecalibrator 2 all 1 total 3 Select jobs to execute... InputFunctionException in rule BaseRecalibrator in file /cluster/home/me/WES/workflow/rules/align.smk, line 104: Error: TypeError: all() takes no keyword arguments
相关代码片段
align.smk中BaseRecalibrator规则(第104行起)
rule BaseRecalibrator: input: bam="/cluster/projects/lab/WES/alignment/{sample}/{sample}.sortfixtag.bam" output: metrics="/cluster/projects/lab/WES/alignment/{sample}/{sample}.recal_data.csv" params: ref = config['ref_index']['genome'], dbsnp = config['snvdb']['dbsnp'], dbmills = config['snvdb']['indels'], dbindel = config['snvdb']['indels2'] threads: 21 shell: """ module load gatk/4.2.5.0 gatk --java-options "-Xmx25g" \ BaseRecalibrator \ -R {params.ref} \ -I {input.bam} \ --use-original-qualities \ -O {output.metrics} \ --known-sites {params.dbsnp} \ --known-sites {params.dbmills} \ --known-sites {params.dbindel} """
主Snakefile
workdir: "/cluster/home/me/WES" ##### load rules ##### include: "rules/common.smk" include: "rules/align.smk" ##### target rules ##### rule all: input: expand("/cluster/projects/lab/WES/alignment/{sample}/{sample}.recal_data.csv", sample=samples["sample_name"])
Config.yaml
ref_index: bwa-index: "/cluster/projects/lab/data/genomes_BWA" genome: "/cluster/projects/lab/data/genomes_BWA/GCA_000001405.29_GRCh38.p14_genomic.fa" snvdb: dbsnp: "/cluster/projects/lab/data/snv_indel_db/dbsnp/All_20180418.vcf.gz" indels: "/cluster/projects/lab/data/snv_indel_db/indels2/Mills_and_1000G_gold_standard.indels.hg38.vcf.gz" indels2: "/cluster/projects/lab/data/snv_indel_db/indels/Homo_sapiens_assembly38.known_indels.vcf.gz"
错误根源排查方向
报错提示TypeError: all() takes no keyword arguments,说明代码中存在误用Python内置函数all()的情况——all()仅接受一个可迭代对象参数,不支持关键字参数(比如all(..., key=xxx)这种写法是错误的)。
虽然报错指向BaseRecalibrator规则,但提供的该规则代码中并未直接调用all(),因此需要检查以下几个地方:
检查
common.smk文件:- 查找是否有使用
all()并传入关键字参数的代码,比如错误写法:all(my_list, key=lambda x: x.startswith("sample")) - 正确写法应该用
map配合all():all(map(lambda x: x.startswith("sample"), my_list))
- 查找是否有使用
检查样本列表
samples的定义:- 主Snakefile中使用了
samples["sample_name"],需确认samples的生成逻辑(大概率在common.smk中),看是否在筛选或转换样本时误用了all()并传入关键字参数。
- 主Snakefile中使用了
检查其他规则的输入函数:
- 若有其他规则使用了动态输入函数(比如
input=lambda wildcards: ...),排查其中是否有错误调用all()的情况,因为Snakemake在解析依赖关系时可能触发该错误。
- 若有其他规则使用了动态输入函数(比如
内容的提问来源于stack exchange,提问作者DHH
相关产品推荐
相关产品推荐

