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

pyparsing异常报错位置指向$而非真实错误点,如何调整定位逻辑?

问题原因

pyparsing默认支持解析回溯,你定义的规则中(Literal('$')+ELM)[...]是可选项,当第二个ELM匹配失败时,解析器会回溯到第一个ELM结束的位置,认为重复项不需要匹配,此时后续的$就不符合parseAll=True要求的文本结束规则,所以报错位置被定位到了$处,而不是第二个ELM真实匹配失败的位置。

解决方法

使用pyparsing的-运算符禁止回溯:在$和ELM之间添加-,表示匹配到$后不允许回溯到未匹配$的分支,解析器会强制继续匹配后续的ELM,匹配失败时就会抛出真实位置的错误。

修改后的核心代码如下:

# 把原来的ALL定义替换为下面的行
ALL = ELM + (Literal('$') - ELM)[...]

修改后运行代码的异常输出如下:

ab3jh-lokdk-12345-lopf9$ab3jh-lokdk-12345-lopfr
                                                  ^
ParseException: Expected tp4, found end of text  (at char 46), (line:1, col:47)
pyparsing.core.Regex - tp4

报错位置直接指向了第二个ELM末尾的错误位置,符合预期。

其他可选方案

如果需要全局优化回溯逻辑、提升解析效率,也可以在代码开头开启packrat解析,也能间接优化报错位置的准确性:

ParserElement.enablePackrat()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:45:01