下面的代码会在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在上面的场景中忽略装饰器并继续显示警告?
答案 0 :(得分:0)
将g()
添加到任一代码段并运行“
TypeError: f() missing 1 required positional argument: 'b'
我无法肯定你不能让PyCharm忽略装饰器(检查PyCharm doc),但在我看来它不应该。 f()
中的g
调用调用包装器而不是包装器,并且包装器具有不受约束的通用签名。正如你自己所说,在调用包装函数之前,包装器可以(和一些包装器)操作args
或kwargs
。换句话说,我认为你期待太多了。静态代码检查不能替代编写和运行测试。