u08*_*138 3 python warnings pycharm python-3.x
我想n*n在 python 中创建一个列表,其中大部分元素都用 None 初始化。然后我将在 for 循环中设置一些元素,但在我将对角线元素设置为 的行中0,我在 PyCharm 中得到了警告突出显示[j],内容如下:
“意外的类型:(int, int)可能的类型:(int, None) (slice, Iterable[None]) 检查信息:此检查检测函数调用表达式中的类型错误。由于动态分派和鸭子类型,此检查会检测函数调用表达式中的类型错误。在有限但有用的情况下是可能的。函数参数的类型可以在文档字符串或 Python 3 函数注释中指定。”
我不知道哪里错了。如果我将二维列表更改为如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
......
Run Code Online (Sandbox Code Playgroud)
这只是一个警告,因此您的代码应该仍然可以运行。
PyCharm 尝试通过告知变量的类型来帮助您避免错误。然而,有时它会出错。
这个特性在函数中确实很有用。例如:
def myfunction(x: str):
return x
myfunction(1)
Run Code Online (Sandbox Code Playgroud)
您应该在 上方看到相同的警告1,因为它是 anint但该函数需要一个str。
在您的情况下,类型不明确,因此 PyCharm 可能会发生误判。
None如果您将代码中的更改为 a1或任何其他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
Run Code Online (Sandbox Code Playgroud)
如果您将 更改None为'a'或任何其他更改str,您将看到类似的警告,但(int, str)此时。
| 归档时间: |
|
| 查看次数: |
7555 次 |
| 最近记录: |