我是pyparsing的新蜜蜂我正在尝试使用setParseAction,但有时候不会调用它。 这是代码
def fun():
comdty_tok = StringStart() + Word(alphas) + StringEnd()
comdty_tok.setParseAction(call_back)
comdty_tok.leaveWhitespace()
return comdty_tok
def call_back(p):
print 'Calling ....'
print p
class ComdtyTok(Token):
comdty_tok = StringStart() + Word(alphas) + StringEnd()
comdty_tok.setParseAction(call_back)
comdty_tok.leaveWhitespace()
parseImpl = comdty_tok.parseImpl
class SymParser(object):
tok = ComdtyTok()
@staticmethod
def parse(symbol):
p = SymParser.tok.parseString(symbol)
print p
print "Second"
x = fun()
x.parseString(symbol)
return p
SymParser.parse('ABCD')
我不明白为什么第一次没有调用setParseAction。
答案 0 :(得分:2)
我第一次玩pyparsing,所以......
在初始化类变量comdty_tok
时,您实际上从不调用parseString()
,因此永远不会调用与parse对象关联的回调。
答案 1 :(得分:1)
我只能说,我并不打算以像你所做的方式扩展像Token这样的课程。我怀疑在你的委托中你所包含的cmdty_tok
属性已经省略了一些其他属性,例如parseAction
,这些属性通常在parseImpl
的分析时被引用。另一方面,fun()
的实现与我使用和使用的其他帮助器和闭包非常一致,并且毫不奇怪,这种方法有效。
您想用ComdtyTok
完成什么?