相关疑难解决方法(0)

如何解决来自pyright的“类型部分未知”警告?

我正在通过 pyright 使用严格的类型检查。

当我有一个返回 pytorch 的方法时,DataLoaderpyright 会抱怨我的类型定义:

声明的返回类型“DataLoader[Unknown]”部分未知 Pyright (reportUnknownVariableType)

看一下 pytorch 的类型存根DataLoader(减少到重要部分):

class DataLoader(Generic[T_co]):
    dataset: Dataset[T_co]

    @overload
    def __init__(self, dataset: Dataset[T_co], ...
Run Code Online (Sandbox Code Playgroud)

据我所看到的,通用型T_coDataLoader应该由定义__init__数据集参数。

Pyright 还抱怨我的Dataset类型定义:

参数“数据集”的类型部分未知参数类型为“数据集[未知]”Pyright (reportUnknownParameterType)

看一下Dataset类型存根:

class Dataset(Generic[T_co]):
    def __getitem__(self, index: int) -> T_co: ...
Run Code Online (Sandbox Code Playgroud)

向我表明该类型应该由__getitem__.

我的数据集的类型签名__getitem__如下所示:

def __getitem__(self, index: int) -> Tuple[Tensor, Tensor]:
Run Code Online (Sandbox Code Playgroud)

基于此,我希望Dataset并被DataLoader推断为Dataset[Tuple[Tensor, Tensor]]DataLoader[Tuple[Tensor, Tensor]]但事实并非如此。

我的猜测是 pyright 无法静态推断这里的类型。

我以为我可以像这样定义我自己的类型签名: …

python static-typing typing python-3.x pyright

4
推荐指数
1
解决办法
1463
查看次数

标签 统计

pyright ×1

python ×1

python-3.x ×1

static-typing ×1

typing ×1