1

我想将十几个属性分配给一个 lxml 节点。lambda 用于简化输入。注释赋值操作没问题,但使用 lambda sa 会抛出异常。有没有人知道在这种情况下可以使用 lambda 吗?提前感谢!

sa = set_attr = lambda n, v: eval("etp.xpath(u'/Recipe_Definition/%s')[0].text = u'%s'" % (n, v), {u'etp':etp})
#etp.xpath(u'/Recipe_Definition/Author')[0].text = rc.author
#etp.xpath(u'/Recipe_Definition/Comment')[0].text = rc.comment
sa(u'Author', rc.author)
sa(u'Comment', rc.comment)

例外情况是:

  sa = set_attr = lambda n, v: eval("etp.xpath(u'/Recipe_Definition/%s')[0].text = u'%s'" % (n, v), {u'etp':etp})
File "<string>", line 1
  etp.xpath(u'/Recipe_Definition/Author')[0].text = u'admin'
4

1 回答 1

0

不需要在这里使用eval()。完全没有。不要用于eval()将字符串值插入到其他字符串值中。此外,lambda不允许在 a 中赋值(赋值是一个语句,alambda只支持表达式)。

以下lambda同样的事情

lambda n, v: setattr(etp.xpath(u'/Recipe_Definition/' + n)[0], 'text', v)

etp用作全局。如果不是您定义的模块的全局变量,您也可以etp作为参数传入:etplambda

lambda etp, n, v: setattr(etp.xpath(u'/Recipe_Definition/' + n)[0], 'text', v)
于 2013-08-15T10:03:43.823 回答