以下最小示例效果很好:
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"]
是一个可以创建数据集的团体?
看到 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 不会抛出任何错误。