1

lxml ノードに多数のプロパティを割り当てたいと考えています。ラムダは、入力を簡素化するために使用されます。コメント割り当て操作は問題ありませんが、ラムダ sa を使用すると例外がスローされます。この場合、ラムダを使用できることを知っている人はいますか? よろしくお願いします!

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()文字列値を他の文字列値に補間するために使用しないでください。さらに、a での代入は許可されてlambdaいません (代入はステートメントであり、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 に答える