PyCharm装饰器代码提示失效问题求助(2019.1.2版本)
消除PyCharm中装饰器修改返回类型的警告方法
PyCharm的静态类型分析会依据原函数的返回类型做推断,当装饰器修改了函数返回类型时,IDE无法自动识别这种变化,因此会弹出警告。你可以通过以下几种方式解决:
方法一:给装饰器添加完整类型注解
借助typing模块的类型工具,明确告知IDE装饰器对函数返回类型的修改,让类型推断更准确:
from typing import Callable, TypeVar, List, Dict # 定义类型变量,分别代表原函数的返回类型和装饰后的返回类型 T = TypeVar('T') def sql_reader() -> Callable[[Callable[..., T]], Callable[..., List[Dict[str, int]]]]: def outer(func: Callable[..., T]) -> Callable[..., List[Dict[str, int]]]: def wrapped_function(*args, **kwargs) -> List[Dict[str, int]]: func(*args, **kwargs) return [{"a": 1, "b": 2}] return wrapped_function return outer @sql_reader() def function_read() -> str: return "1" result = function_read() for x in result: print(x['a']) print(result)
方法二:给变量添加类型注解
直接在接收返回值的变量上标注类型,让IDE明确变量的实际类型:
from typing import List, Dict def sql_reader(): def outer(func): def wrapped_function(*args, **kwargs): func(*args, **kwargs) return [{"a": 1, "b": 2}] return wrapped_function return outer @sql_reader() def function_read(): return "1" # 明确标注result的类型 result: List[Dict[str, int]] = function_read() for x in result: print(x['a']) print(result)
方法三:临时忽略特定警告
如果不想添加类型注解,也可以直接让PyCharm忽略该警告:
- 在出现警告的行(比如
for x in result:)按下Alt+Enter,选择「Suppress for statement」,IDE会自动添加# noinspection PyTypeChecker注释; - 或者在该行末尾添加
# type: ignore,强制忽略类型检查警告。
内容的提问来源于stack exchange,提问作者user1754439
相关产品推荐
相关产品推荐

