将列表传递给 exec 并填充它
pass list to exec and fill it
我有以下内容,但似乎不太正确:
newsItems = []
dummy_exec_data = '''
scraped_data = soup.select("div#content, div.gamma > a, a")
for data in scraped_data:
from bs4 import BeautifulSoup
partial_soup = BeautifulSoup(str(data), "html.parser")
title = partial_soup.a.text
url = partial_soup.a["href"]
newsItems.append({"title":title, "url":url})
'''
exec(dummy_exec_data)
print(newsItems)
现在我想知道是否可以将 newsItems 传递到 exec 函数中以便填充它。目前它 returns 为空,而该块确实正确地抓取了数据。似乎 newsItems 没有看到范围。
将对象作为局部或全局传递:
exec(dummy_exec_data, {}, {'newsItems': newsItems})
这会将名称作为 locals
命名空间的一部分显式传递,以避免意外传递过多信息。
演示:
>>> newsItems = []
>>> exec('newsItems.append("foo")', {}, {'newsItems': newsItems})
>>> newsItems
['foo']
我有以下内容,但似乎不太正确:
newsItems = []
dummy_exec_data = '''
scraped_data = soup.select("div#content, div.gamma > a, a")
for data in scraped_data:
from bs4 import BeautifulSoup
partial_soup = BeautifulSoup(str(data), "html.parser")
title = partial_soup.a.text
url = partial_soup.a["href"]
newsItems.append({"title":title, "url":url})
'''
exec(dummy_exec_data)
print(newsItems)
现在我想知道是否可以将 newsItems 传递到 exec 函数中以便填充它。目前它 returns 为空,而该块确实正确地抓取了数据。似乎 newsItems 没有看到范围。
将对象作为局部或全局传递:
exec(dummy_exec_data, {}, {'newsItems': newsItems})
这会将名称作为 locals
命名空间的一部分显式传递,以避免意外传递过多信息。
演示:
>>> newsItems = []
>>> exec('newsItems.append("foo")', {}, {'newsItems': newsItems})
>>> newsItems
['foo']