pyparsing递归不会抛出异常

时间:2011-11-03 14:06:18

标签: python parsing pyparsing

我有以下代码片段,其中包含来自pyparsing解析器的递归语句:

def parse_query(querystr):
    # <<other parsing stuff>>
    queryexpression = querycondition + ZeroOrMore(Word("and") + querycondition)
    try:
        return queryexpression.parseString(querystr)
    except ParseException as e:
        logger.debug("Error parsing '{0}': \n {1}".format(querystr, e))
        return None

当我提供查询时:

tokens = parse_query("HR:EE > -28.9 and BL:AA = 0 THISISNOTAND KLAS:TT eq true")
print(tokens)

它产生:

[['HR', ':', 'EE', '>', '-28.9'], 'and', ['BL', ':', 'AA', '=', '0']]

然后默默地跳过最后一个条件。没有异常抛出。

如何捕获此字符串中的错误?

1 个答案:

答案 0 :(得分:1)

  

queryexpression = querycondition + ZeroOrMore(Word(“and”)+ querycondition)

不需要解析整行ZeroOrMore就是这个意思。当遇到无法满足定义的内容时它会停止。它总是会成功,因为“零”是嵌套表达式匹配次数的有效选项。

如果你想一直解析到一行的结尾,那么你将需要一个明确要求的表达式,例如通过加上+ LineEnd

除非你这样做,否则行不是“特殊的”。默认情况下,解析表达式期望匹配输入的前缀,而不是整个输入,因为您总是可能希望使用另一个表达式来解析下一个位。