python 访问具有 None 值的二维列表时发出警告
warning when python access 2d list with None value
我想在 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 中创建一个 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)
。