擅长:python、mysql、java
<p>通常,我建议在将表达式组装成更高级别的表达式之前,不要指定结果名称,如下所示:</p>
<pre><code>intnum = Word(nums).setParseAction(lambda t: int(t[0]))
realnum = Combine(Word(nums) + '.' + Word(nums)).setParseAction(lambda t: float(t[0]))
hostname = Word(alphas, alphanums+'-')
timestamp = Regex(r'\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d')
statslogentry = (timestamp('timestamp') + hostname('hostname') +
'CPU:' + realnum('cpu') +
'DISK_IO:' + intnum('disk_io') +
'NETWORK_IO:' + intnum('network_io'))
</code></pre>
<p>但是,当使用<code>Forward</code>时,这可能会对您不利,这里就是这样。OP代码中的一个特定错误是</p>
<pre><code>SUBGRAPH = Forward("SUBGRAPH")
</code></pre>
<p>我认为OP试图使用results name快捷方式,但实际上创建了一个内容为<code>Forward</code>的<code>Literal("SUBGRAPH")</code>。将此更改为</p>
<pre><code>SUBGRAPH = Forward()("SUBGRAPH")
</code></pre>
<p>从<code>Or</code>表达式中删除结果名称可以解决原来的问题。但我仍然认为这属于“抓住你了”的范畴。你知道吗</p>