我是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。
发布于 2012-02-11 03:14:19
我只是第一次玩pyparsing,所以...
在初始化类变量comdty_tok时,您实际上从未调用过parseString(),因此与解析对象关联的回调也从未被调用过。
发布于 2012-02-11 05:06:34
我所能说的是,我真的不想让Token这样的类以您所做的方式进行扩展。我怀疑,在委托所包含的cmdty_tok属性时,您忽略了公开一些其他属性,比如parseAction,这些属性通常会在解析时由parseImpl引用。另一方面,您的fun()实现与我使用过的其他帮助器和闭包非常一致,这并不奇怪,这种方法是有效的。
您试图使用ComdtyTok实现什么目标
https://stackoverflow.com/questions/9233032
复制相似问题