Snakemake中使用dict与expand组合时出现值丢失问题
问题排查与解决:Snakemake函数返回Dict时input_a为空的问题
核心原因
变量名冲突:函数get_rule_output()内部定义了局部变量output={},而全局作用域中也存在同名变量output='output'。执行expand(input_a, output=output, ...)时,output参数实际引用的是局部的空字典,而非全局的字符串'output',导致占位符{output}无法被正确替换,最终返回空列表。
解决方法
修改函数内部的字典变量名,避免与全局变量重名。示例代码如下:
# debug.smk input_a='/{output}/to/{group_name}/input_a' input_b='/{output}/to/{group_name}/input_b' rule_a=True rule_b=True output='output' group_name='group_name' def get_rule_output(): result={} # 改名避免与全局output冲突 if rule_a: result['output_a']=expand(input_a, output=output, group_name=group_name) print(expand(input_a, output=output, group_name=group_name)) if rule_b: result['output_xx']=expand(input_b, output=output, group_name=group_name) print(result) return result rule all: input: get_rule_output(),
修改后,expand中的output=output会正确引用全局的字符串'output',占位符替换正常,返回的字典将包含两个预期的路径列表:
{'output_a': ['/output/to/group_name/input_a'], 'output_xx': ['/output/to/group_name/input_b']}
内容的提问来源于stack exchange,提问作者zhang
相关产品推荐
相关产品推荐

