装饰函数调用现在显示 PyCharm 中参数不正确的警告

问题描述 投票:0回答:1

我在静态类型检查修饰函数时遇到一些问题。例如,当我使用不正确的函数参数名称或类型时,我不会在 IDE 中收到任何警告或错误提示,仅在运行时收到。

什么步骤会重现该问题?

  • 向函数添加装饰器

  • 使用不正确的参数名称或类型

预期的结果是什么?

  • PyCharm 应突出显示错误的参数名称或错误类型。

会发生什么?

  • 属性名称未突出显示。

附加信息

  • 这是Python 3.10和PyCharm 2023.3.4

代码示例如下:

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

预先感谢您的帮助。

python pycharm decorator python-typing
1个回答
0
投票

看起来与此 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就会报告错误。

© www.soinside.com 2019 - 2024. All rights reserved.