当python访问无值的二维列表时发出警告

时间:2018-08-11 14:47:48

标签: python python-3.x pycharm warnings

我想在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
        ......

1 个答案:

答案 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)