我在静态类型检查修饰函数时遇到一些问题。例如,当我使用不正确的函数参数名称或类型时,我不会在 IDE 中收到任何警告或错误提示,仅在运行时收到。
什么步骤会重现该问题?
向函数添加装饰器
使用不正确的参数名称或类型
预期的结果是什么?
会发生什么?
附加信息
代码示例如下:
def myDecorator(func):
def wrapper(*args, **kwargs):
return func(*args, **kwargs)
return wrapper
@myDecorator
def myFunc(x: int, y: int):
print(x+y)
myFunc(z=4, x="something") # Expecting "z=4" and x="something" to be highlighted
预先感谢您的帮助。
看起来与此 PyCharm 问题类似 https://youtrack.jetbrains.com/issue/PY-48970/PyCharm-doesnt-report-mistakes-in-arguments-passed-to-a-decorated-function-call
如果您愿意用
ParamSpec
注释装饰器,您可以这样做...
from typing import ParamSpec
from typing import TypeVar
from typing import Callable
P = ParamSpec("P")
T = TypeVar("T")
def myDecorator(func: Callable[P, T]) -> Callable[P, T]:
def wrapper(*args: P.args, **kwargs: P.kwargs) -> T:
return func(*args, **kwargs)
return wrapper
@myDecorator
def myFunc(x: int, y: int) -> None:
print(x + y)
myFunc(z=4, x="something") # Expecting "z=4" and x="something" to be highlighted
这样PyCharm就会报告错误。