Pylance 认为 H5 文件的索引不会创建组

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

以下最小示例效果很好:

import h5py

f = h5py.File("mytestfile.hdf5", "w")
f.create_group("hello") # Pylance error here
f["hello"].create_dataset("hello", data=1)

g = f.create_group("bye")
g.create_dataset("bye", data=2)

f.close()

但是,在指定的行上,Pylance 会抛出一个错误,并显示

Cannot access member "create_dataset" for type "Dataset" Member "create_dataset" is unknown
(并且在同一行中,“Datatype”而不是“Dataset”再次出现相同的错误。)请注意,此错误不会发生在后面的行上运行相同的
create_dataset
功能。

即使在错误行之前添加

assert isinstance(f["hello"], h5py.Group)
也无法解决问题。

为什么 Pylance 认为

f["hello"]
Datatype
Dataset
而不是
Group

我还查看了代码库,看看我是否可以找到索引魔术方法发生的位置,但无法轻松找到它来查看它是否输入正确和/或修复它。

如何让 Pylance 理解

f["hello"]
是一个可以创建数据集的团体?

type-hinting h5py pylance
1个回答
0
投票

看到 Pylance 认为

k
中的
k = f["hello"]
属于
Group | Dataset | Datatype
类型后,我意识到发生了什么事。

首先,显然 Pylance 确实认为

f["hello"]
可以是一个组,它也认为它可以是一个数据集或数据类型,并且这些类型不存在
create_dataset
方法,所以它正确地抛出一个错误。

我尝试过的修复它的断言方法确实应该有效(我希望能有评论解释为什么这很难做到/不是静态类型检查的默认行为),但静态类型检查并不是这样还很先进。

相反,如果您执行

k = f["hello"]
,然后使用断言
assert isinstance(k, h5py.Group)
,然后 then 执行
k.create_dataset("hello", data=1)
,Pylance 不会抛出任何错误。

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