我想在python中创建一个n*n
列表,其中大多数元素都以None初始化。然后,我将在for循环中设置一些元素,但是在将对角元素设置为0
的那一行中,我在PyCharm的[j]
上得到了警告突出显示,
“意外类型:(整数,整数)可能的类型:(整数,无)(切片, Iterable [None])检查信息:此检查可检测类型错误 在函数调用表达式中。由于动态调度和鸭子输入, 在有限但有用的情况下,这是可能的。种类 函数参数可以在docstrings或Python 3中指定 功能注释。”
我不知道哪里出了问题。如果我在第一行中将2d列表更改为全部初始化为0
,则此警告消失了。 None
在这里有什么特别之处?
prev = [[None] * n for i in range(n)]
for i in range(n):
for j in range(n):
if i == j:
prev[i][j] = 0
......
答案 0 :(得分:2)
这只是一个警告,因此您的代码仍应运行。
PyCharm尝试通过告诉变量类型应为您提供帮助,以帮助您避免错误。但是,有时会弄错。
此功能在功能中确实很有用。例如:
def myfunction(x: str):
return x
myfunction(1)
您应该在1
上方看到相同的警告,因为它是int
,但是该函数需要一个str
。
在这种情况下,类型不是明确的,因此很可能会发生PyCharm的错误判断。
如果将None
从代码更改为1
或任何其他int
,则警告已消失。
prev = [[1] * n for i in range(n)]
for i in range(n):
for j in range(n):
if i == j:
prev[i][j] = 0
^
|
Warning gone
如果将None
更改为'a'
或任何其他str
,您将看到类似的警告,但这次带有(int, str)
。