我正在使用具有函数语法的装饰器,如它所描述的 here .
我循环遍历字典列表。在此循环中,我用带有参数的装饰器包装了一个通用函数。然后我使用当前字典作为参数调用包装函数。
我的问题是我收到赋值前引用的局部变量“generic_evaluator”
错误。
这是我的代码:
相关装饰器:
def log(logfile_name):
def inner_log(func):
def wrapped(*args, **kwargs):
import os
ret = func()
# business code...
return wraps(func)(wrapped)
return inner_log
这里是我用 log
装饰器包装 generic_evaluator
函数的地方。
for evaluation in generic_evaluations:
generic_evaluator = log(evaluation['suffix'])(generic_evaluator)
generic_evaluator(evaluation['suffix'], evaluation['id'])
编辑
加上这段代码可能会更清楚:
@tictoc
def generic_evaluator(suffix_url, id):
xml = etree.parse(get_resource(base_url + "/" + suffix_url + "/" + str(id)))
links = fetch_urls_from_xml(xml)
return links
最佳答案
如果generic_evaluator
是一个全局函数,并且您确实想要重新绑定(bind)全局名称generic_evaluator
,请将此名称声明为全局:
global generic_evaluator
如果您不想重新绑定(bind)全局名称,请使用不同的本地名称并初始化它:
local_generic_evaluator = generic_evaluator
This answer给出了正在发生的事情的解释。
关于python - 装饰器赋值之前引用的局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10913060/