当python访问带有None值的2d列表时发出警告

发布于 2021-01-29 15:04:02

我想n*n在python中创建一个列表,其中大多数元素都以None初始化。然后,我将在for循环中设置一些元素,但是在这一行中,我将对角线元素设置为0[j]在PyCharm中我得到了警告提示,说:

“意外的类型: (int,int) 可能的类型: (int,None) (slice,Iterable
[None])检查信息:此检查可检测函数调用表达式中的类型错误。由于动态调度和鸭子输入,此在有限但有用的情况下,这是可能的。函数参数的类型可以在文档字符串或Python
3函数注释中指定。”

我不知道哪里错了。如果我像0第一行一样将2d列表更改为全部初始化,则该警告消失了。有什么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
被浏览
69
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这只是一个警告,因此您的代码仍应运行。

    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)这次将显示类似的警告。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看