【发布时间】:2018-05-09 07:39:53
【问题描述】:
我正在编写一些 Python 2.7.12 代码,并且对此代码执行中出现以下错误感到非常惊讶:
def validate_available_links(self, link_dict, sub_element=None):
def strip_dirt(key_val):
#TODO: properly strip HTML encoded characters
key_val = key_val.replace("\u2039", "<")
key_val = key_val.replace("\u203a", ">")
return key_val
# Scrape all the links from the current webpage and verify
# it with the provided link dictionary.
if sub_element is None:
act_links = self.suiteContext['browser'].webdriver.find_elements_by_tag_name('a')
else:
act_links = sub_element.find_elements_by_tag_name('a')
result = {strip_dirt(lnk.text): lnk.get_attribute('href') for lnk in act_links}
diff_keys = set(result.keys()) - set(link_dict.keys())
diff_values = set(result.values()) - set(link_dict.values())
self.tear_down_hook()
for l_text, l_url in link_dict.iteritems():
self.cfg.logger.info("[VALIDATION] Verify Link text [{}] and URL [{}]."
.format(l_text, l_url))
import pdb; pdb.set_trace()
以及在执行代码时
(Pdb) result = {strip_dirt(lnk.text): lnk.get_attribute('href') for lnk in act_links}
*** NameError: global name 'strip_dirt' is not defined
(Pdb) strip_dirt
<function strip_dirt at 0x0651BBB0>
(Pdb) result = {strip_dirt(lnk.text): lnk.get_attribute('href') for lnk in act_links}
*** NameError: global name 'strip_dirt' is not defined
(Pdb) strip_dirt('x')
'x'
(Pdb) {strip_dirt(lnk.text): lnk.get_attribute('href') for lnk in act_links}
*** NameError: global name 'strip_dirt' is not defined
谁能解释为什么字典理解不能访问内部函数strip_dirt,但外部函数的其余部分可以访问?
【问题讨论】:
标签: python-2.7 dictionary-comprehension