python访问无值2d列表时出现警告
我想在python中创建一个python访问无值2d列表时出现警告,python,python-3.x,pycharm,warnings,Python,Python 3.x,Pycharm,Warnings,我想在python中创建一个n*n列表,其中大多数元素初始化为None。然后我将在for循环中设置一些元素,但在我将对角线元素设置为0的行中,我在PyCharm中的[j]上得到了一个警告高亮显示,表示: 意外类型:(int,int)可能的类型:(int,None)(切片, Iterable[None])检查信息:此检查检测类型错误 在函数调用表达式中。由于动态分派和duck类型, 这在数量有限但有用的情况下是可能的 函数参数可以在DocString或Python 3中指定 函数注释。” 我不知道
n*n
列表,其中大多数元素初始化为None。然后我将在for循环中设置一些元素,但在我将对角线元素设置为0
的行中,我在PyCharm中的[j]
上得到了一个警告高亮显示,表示:
意外类型:(int,int)可能的类型:(int,None)(切片,
Iterable[None])检查信息:此检查检测类型错误
在函数调用表达式中。由于动态分派和duck类型,
这在数量有限但有用的情况下是可能的
函数参数可以在DocString或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
......
这只是一个警告,因此您的代码仍应运行 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)
这一次。在python 2.7中效果很好您的代码在python 3.6.1中对我很好,在python 3.5.5和python 2.7.15
在Ubuntu 16.04中也很好,我在Windows 10 x64A中使用python 3.6.1和PyCharm Community Edition 2018.2时出现了类似的错误。