<p>Snakemake将<code> config</code>键/值对的值作为输入传递给<a href="https://github.com/snakemake/snakemake/blob/7504969fa39dee63638a799c0fdd3fc763a60fd6/snakemake/__init__.py#L667" rel="nofollow noreferrer">this list</a>中的每个函数,依次计算该值:</p>
<pre><code>parsers = [int, float, eval, str]
</code></pre>
<p>在Python<a href="https://docs.python.org/3/reference/lexical_analysis.html#integer-literals" rel="nofollow noreferrer">[u]nderscores are ignored for determining the numeric value of the literal</a>中计算数字文本时</p>
<p>因此,<code>60_3_6</code>作为整数计算,因为<code>int</code>在<code>str</code>之前被尝试:</p>
<pre><code>>>> for p in parsers:
... print(p('60_3_6'))
...
6036
6036.0
6036
60_3_6
</code></pre>
<p>(在问题的第一个示例中,<code>60_3_6,</code>作为值传递;在本例中,<code>eval</code>返回一个元组,其中包含<code>6036</code>作为其唯一元素,如配置值转储中所示</p>
<p>要解决这个问题,您需要传递一个值,该值只能由<code>str</code>成功处理</p>
<p>另一个可能的解决方法是传递</p>
<pre><code>lambda : '60_3_6'
</code></pre>
<p>由于snakemake将使用<a href="https://github.com/snakemake/snakemake/blob/7504969fa39dee63638a799c0fdd3fc763a60fd6/snakemake/__init__.py#L685" rel="nofollow noreferrer">callable instead of the result of processing parsers</a>但是我不知道如何从配置文件或命令行执行此操作,因此我认为您需要直接从python代码调用snakemake的<code>main</code>函数(可能创建包装脚本?)</p>