Pylint类型检查报错:Union类型索引问题及混合类型列表标注咨询
类型标注与Pylint类型推断问题解决
一、Pylint索引报错的解决
当函数参数structured和grid标注为Union[List[bool], bool],通过if structured is False or grid is False:处理布尔值场景后,else分支中对变量做索引操作时,Pylint会抛出Value of type "Union[List[bool], Literal[True]]" is not indexable错误——这是因为Pylint无法自动识别该分支的类型收缩逻辑,不知道此时变量已经是列表类型。
解决方式很直接,在else分支开头手动添加类型断言,明确告诉静态检查工具变量的类型:
from typing import Union, List, cast def your_func(structured: Union[List[bool], bool], grid: Union[List[bool], bool]): if structured is False or grid is False: # 处理布尔值为False的逻辑 pass else: # 手动断言变量为列表类型 structured = cast(List[bool], structured) grid = cast(List[bool], grid) # 后续索引操作不会再报错 print(structured[0], grid[1])
二、混合类型列表的标注
包含字符串(str)和整数(int)的列表,可以直接用List[Union[str, int]]做类型标注。如果你的项目使用Python 3.9及以上版本,还可以用更简洁的标准库语法list[Union[str, int]]。
示例:
from typing import List, Union # Python 3.8及以下 mixed_list: List[Union[str, int]] = ["apple", 123, "banana", 456] # Python 3.9+ mixed_list: list[Union[str, int]] = ["apple", 123, "banana", 456]
内容的提问来源于stack exchange,提问作者L Maxime
相关产品推荐
相关产品推荐

