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

Snakemake中lambda wildcards引发InputFunctionException与KeyError问题排查

Snakemake lambda wildcards 引发异常的原因及调试方法

问题重现

运行以下Snakemake规则时,触发InputFunctionException和KeyError错误:

rule tumor_with_matched_normal:
    normal_bam = lambda wildcards: os.path.join(
                  "/home/bio/processed_bams/" + config[wildcards.sample]["normal"] + "." + config["ref_basename"] + ".sorted.bam")

错误原因

  1. KeyError的核心诱因
    • config[wildcards.sample]不存在:当前wildcards的sample值在config字典中无对应键
    • config[wildcards.sample]["normal"]不存在:wildcards.sample对应的config条目存在,但缺少"normal"子键
    • config["ref_basename"]不存在:全局config字典中没有"ref_basename"这个键
  2. InputFunctionException的本质
    这是Snakemake对输入函数(此处的lambda)执行失败的包装异常,根源是lambda内部抛出了KeyError,进而触发该外层异常。

打印normal_bam变量的方法

方法1:替换lambda为普通函数(推荐)

将lambda换成具名函数,在函数内部添加打印逻辑,可读性和调试性更好:

import os

def get_normal_bam(wildcards):
    # 打印关键变量排查问题
    print(f"DEBUG: 当前sample wildcard值: {wildcards.sample}")
    print(f"DEBUG: 对应config条目: {config.get(wildcards.sample, '不存在')}")
    
    normal_sample = config[wildcards.sample]["normal"]
    ref_basename = config["ref_basename"]
    normal_bam = os.path.join("/home/bio/processed_bams/", f"{normal_sample}.{ref_basename}.sorted.bam")
    print(f"DEBUG: 生成的normal_bam路径: {normal_bam}")
    return normal_bam

rule tumor_with_matched_normal:
    normal_bam = get_normal_bam(wildcards)
    # 补充规则的其他字段(input/output/params等)

方法2:临时在lambda中嵌入打印(不推荐)

如果一定要保留lambda形式,可以通过逗号表达式嵌入打印逻辑,但可读性较差:

normal_bam = lambda wildcards: (
    print(f"DEBUG: sample={wildcards.sample}, normal={config[wildcards.sample].get('normal', '不存在')}, ref={config.get('ref_basename', '不存在')}"),
    os.path.join("/home/bio/processed_bams/", f"{config[wildcards.sample]['normal']}.{config['ref_basename']}.sorted.bam")
)[1]

额外调试技巧

在Snakefile开头添加print(config),直接打印整个config字典,确认所有需要的键是否存在、对应值是否符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 04:45:38