Как в Python я могу вызвать функцию с переменной, которая хранится в виде строки - PullRequest
0 голосов
/ 25 марта 2011

У меня есть проблема, похожая на описание здесь , но немного сложнее. Есть объекты BeautifulSoup (магазин в списке), и я хочу найти некоторые другие теги. Информация, какие теги я хочу найти, хранится в строках. I.e.:

a= [...] #(list of BeautifulSoup objects)
next="findNext('span')"

b=[ getattr(c,next).string for c in a]

не работает. Что я делаю не так.

Ответы [ 2 ]

1 голос
/ 25 марта 2011

Похоже на то, что вы хотите:

b = [ eval("c." + next).string for c in a ]

Это вызовет findNext('span') для каждого элемента c списка a и сформирует список результатов каждого findNext вызова в списке b.

0 голосов
/ 25 марта 2011

Попробуйте

trees = [...] #(list of BeautifulSoup objects)
strings = [tree.findNext('span').string for tree in trees]

или, если вам действительно нужно,

trees = [...] #(list of BeautifulSoup objects)
next = ('findNext', ('span',))
strings = [getattr(tree, next[0])(*(next[1])).string for tree in trees]

Итак, я предполагаю, что следующий вопрос: как просто превратить "findNext('span')" в ('findNext', ('span',)) (учитывая, что может быть несколько аргументов)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...