You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 18:25:38