为什么会出现以下代码:
v = [None for _ in range(3)]
v[-1] = 0 <<<
Run Code Online (Sandbox Code Playgroud)
告诉我这个?
意外类型:(int, int) 可能的类型:(int, None) (slice, Iterable[None]) ...
摆脱此类警告的一个简单解决方法是在v
变量上放置类型提示:
v: list = [None for i in range(3)]
v[-1] = 0
Run Code Online (Sandbox Code Playgroud)
PyCharm 会将其视为v: list[Any]
并允许您在没有警告的情况下分配任何类型的值。
根据[Python 3.Docs]:内置类型 - 列表(重点是我的):
列表是可变序列,通常用于存储同质项目的集合(其中精确的相似度将根据应用程序而变化)。
int和NoneType不被认为是同类的(通过PyCharm的代码检查),因此出现警告。解决这个问题的最简单方法是用int填充列表:
v = [0 for _ in range(3)] # [0] * 3 # Shorter
v[-1] = 0
Run Code Online (Sandbox Code Playgroud)
作为替代方案,您可以使用元组作为异构项目容器(正如 @Jeyekomon 指出的那样),但请记住元组是不可变的(一旦创建,就无法更改)。