gpt4 book ai didi

python - 当 python 访问无值的 2d 列表时发出警告

转载 作者:行者123 更新时间:2023-12-04 13:21:33 25 4
gpt4 key购买 nike

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

"Unexpected type(s): (int, int) Possible types: (int, None) (slice, Iterable[None]) Inspection info: This inspection detects type errors in function call expressions. Due to dynamic dispatch and duck typing, this is possible in a limited but useful number of cases. Types of function parameters can be specified in docstrings or in Python 3 function annotations."

不知道哪里错了。如果我将 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 - 当 python 访问无值的 2d 列表时发出警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51800809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com