装饰者抑制未填充的参数'警告

时间:2015-04-10 18:09:44

标签: python python-3.x pycharm

下面的代码会在PyCharm中产生一个视觉黄色警告,因为f()内的g()缺少参数。

def f(b):
    return b

def g():
    return f()
#           ^
#           |___ A warning here 

这很棒,因为每当我修改f()的参数时,我都希望看到并轻松修复它。

但是,如果我在f()上使用装饰器,则此警告会消失:

def some_decorator(func):
    def wrapped(*args, **kwargs):
        func(*args, **kwargs)
    return wrapped


@some_decorator
def f(b):
    return b


def g():
    return f()
#            ^
#            |___ no warning

我猜这是因为装饰者可能会向f()提供所需的参数。

有没有办法让PyCharm在上面的场景中忽略装饰器并继续显示警告?

1 个答案:

答案 0 :(得分:0)

g()添加到任一代码段并运行“

TypeError: f() missing 1 required positional argument: 'b'

我无法肯定你不能让PyCharm忽略装饰器(检查PyCharm doc),但在我看来它不应该。 f()中的g调用调用包装器而不是包装器,并且包装器具有不受约束的通用签名。正如你自己所说,在调用包装函数之前,包装器可以(和一些包装器)操作argskwargs。换句话说,我认为你期待太多了。静态代码检查不能替代编写和运行测试。