尝试告诉我有关我的字典的 pylance 下标错误是什么?

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

我有以下代码:

for table in list(my_dict.keys()):
    if table in my_other_dict:
        for file in my_dict[table]:
            if file in my_other_dict[table]:
                my_dict[table].remove(file)
                if not my_dict[table]:
                    del my_dict[table]

但是第二个、第三个和第四个

my_dict
参考文献带有下划线,并出现以下错误:

类“dict”的下标会产生运行时异常;括 在引号中键入注释

我能找到的唯一或多或少相关的互联网资源是这篇文章,但我不明白如何将其应用到我的案例中。

确实,当执行这一小段代码时,并没有出现运行时异常。

此外,最后一个

my_dict
引用带有下划线,并带有以下错误消息:

通用类类型无法删除

该字典由以下函数构建并返回(仅签名,内容太大):

def meta_from_iso_to_utf(self, correct_meta_files):

如何修复我的代码,以便 pylance 停止抱怨这些问题,因为代码按预期运行,这些问题似乎不是问题?


编辑1(回答弗兰克的评论):

my_dict
的定义如下:

some_dict, my_dict = object.meta_from_iso_to_utf(
    argument
)

在该方法中,

my_dict
在循环中的定义如下:

my_dict[key].append[value[0]]

table
是循环过程中包含
my_dict
的键的变量,是一个字符串。该变量仅在此循环中使用。

我的编辑器是

visual studio code 1.60.1
,带有微软版本的Python扩展
v2021.9.1246542782

python type-hinting python-typing pylance
1个回答
0
投票

如果我添加这样的类型注释,我会收到这种错误:

errors: list[str]

这会导致“类“list”的下标将生成运行时异常;将类型注释括在引号中”。

所以对于你的问题“试图告诉我的 pylance 下标错误是什么”。 这意味着,如果您在此上下文中使用

list
作为类型注释而不是实际的列表声明,那么您应该将其放在双引号中以避免错误。所以如果我将代码更改为:

errors: "list[str]"

皮兰斯很高兴。至于您的特定代码示例,我只能想象它发生在那里,因为 pylance 由于某种原因检测到这必须是类型注释的一部分,而不是列表类型的实际用法。

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