【发布时间】:2017-02-14 16:05:12
【问题描述】:
短版:如果我定义一个装饰器来在运行时导入一个模块并在func_globals 中声明一个方法,我如何告诉Pylint 结果变量已经定义?
长版:考虑以下示例:
from importlib import import_module
def with_import(module):
modname = module.split('.')[-1]
def decorate(func):
def wrapper(*args, **kwargs):
func.func_globals[modname] = import_module(module)
return func(*args, **kwargs)
return wrapper
return decorate
@with_import('numpy')
def create_array(n):
return numpy.empty(n)
print(create_array(5))
这段代码工作得很好,因为with_import 装饰器为create_array 函数声明了numpy。但是,当我运行 PyLint 时,我看到了
E: 16,11: Undefined variable 'numpy' (undefined-variable)
有没有办法告诉 Pylint 这个变量实际上是在运行时定义的?我真的不想禁用整个模块的unused-variable 检查,以防有人在以后实际声明一个常规未使用的变量。
【问题讨论】:
-
你能解释一下你为什么这样做吗?真的不是很好。
-
with_import装饰器在生产模块中用于在运行时导入可选依赖项,并带有引用调用函数的漂亮错误消息。我本可以把它放到一个函数中,然后在相关方法的第一行调用它,但是装饰器看起来更优雅(当时)。
标签: python python-decorators pylint