python - 装饰器赋值之前引用的局部变量

标签 python decorator

我正在使用具有函数语法的装饰器,如它所描述的 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/

相关文章:

javascript - 如何在 Pyramid 中处理 POSTed JS 数组

python - 什么是 "@"在 Python 函数之上的装饰器?

python - 如何在python中装饰一个生成器

python - 在描述符中,__call__ 是否可以访问使用装饰器的类?

go - 一个通用的 golang 装饰器(要点需要澄清)

python - 不同的 PyCharm 和 IDLE Python 版本

python - 来自 sklearn.metrics.silhouette_samples 的内存错误

python - 为什么 Pandas 数据帧 to_dict ("records") 与另一个简单的实现相比性能很差?

python 3 : clean example for inheritance & abstract methods?

c# windows-services - 如何处理日志记录异常?