如何断言pyparsing.ParseResults内容?

时间:2018-01-18 04:12:51

标签: unit-testing pyparsing

我想在assert类及其内容上使用Python pyparsing.ParseResults进行验证。

这里给出了一个Python pyparsing代码的工作片段:

import pyparsing as pp
first = pp.Word(pp.srange('[a-zA-Z]'), exact=1)
rest = pp.Optional(pp.Word(pp.srange('[_0-9a-zA-Zz]')))
keyName = pp.Combine(first + rest)

简单的打印输出(并且会产生误导):

print keyName.parseString("Abc_de")
['Abc_de']
#
print ['Abc_de']
['Abc_de']

当然,以下断言失败了:

# Unit test that is faulty
assert keyName.parseString("Abc_de") == ['Abc_de']

单元测试失败...因为['Abc_de']的类型是listkeyName.parseString("Abc_de"))的类型是<class 'pyparsing.ParseResults'>

我应该使用什么方法调用以便轻松进行断言?

1 个答案:

答案 0 :(得分:2)

asList返回的结果使用parseString方法。

import pyparsing as pp
first = pp.Word(pp.srange('[a-zA-Z]'), exact=1)
rest = pp.Optional(pp.Word(pp.srange('[_0-9a-zA-Zz]')))
keyName = pp.Combine(first + rest)

assert keyName.parseString('Abc_de').asList() == ['Abc_de']