PyCharm中类内装饰器修饰函数静态类型检查无错误提示问题
PyCharm装饰器静态类型检查失效问题
在使用PyCharm进行静态类型检查时,遇到装饰器修饰函数的参数校验问题:当调用被装饰器修饰的函数时传入错误的参数名或类型,IDE不会给出任何警告或错误提示,仅在运行时才会报错。
问题复现步骤
- 为函数添加装饰器
- 调用函数时传入错误的参数名或类型
预期结果
PyCharm应高亮显示错误的参数名或类型。
实际结果
错误的参数名未被IDE高亮提示。
环境信息
- 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") # 期望“z=4”和x="something"被高亮
补充说明(类内装饰器问题)
普通函数的上述问题已通过typing.ParamSpec和typing.TypeVar修复,但类内部定义的被装饰器修饰的函数仍存在该问题:
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 class myClass: @myDecorator def myFunc2(self, x: int, y: int) -> None: print(x + y) @myDecorator def another_function(self): self.myFunc2(x=3) # 显示类型提示:P,并高亮“x=3”为错误参数
内容的提问来源于stack exchange,提问作者tomas-silveira
相关产品推荐
相关产品推荐

