PyCharm 带有数组的函数的 getitem 警告
PyCharm getitem warning for functions with arrays
我从 PyCharm 收到代码检查警告。我理解其中的逻辑,但我不清楚修复它的适当方法。假设我有以下示例函数:
def get_ydata(xdata):
ydata = xdata ** 2
for i in range(len(ydata)):
print ydata[i]
return ydata
我收到 2 条警告:
>> Expected type 'Sized', got 'int' instead (at line 3)
>> Class 'int' does not define '__getitem__', so the '[]' operator cannot be used on its instances (at line 4)
函数的目的当然是解析一个numpy的xdata数组。但是 PyCharm 不知道这一点,因此在没有任何进一步说明的情况下假定 xdata(因此也是 ydata)是一个整数。
解决此警告的适当方法是什么?我应该注意,添加类型检查行将修复警告。那是最优解吗?例如:
if not type(ydata) is np.ndarray:
ydata = np.array(ydata)
最后,添加 Sphinx 文档字符串信息似乎对警告没有任何影响。 (当 xdata 指定为 str 时,警告仍然显示 'int')。同样迭代 y 直接导致以下错误:
for y in ydata:
...
>> Expected 'collections.Iterable', got 'int' instead
Pycharm 有 type hinting 个可能有用的功能。
例如在这种情况下,以下代码使错误消失:
import numpy as np
def get_ydata(xdata):
ydata = xdata ** 2 # type: np.ndarray
for i in range(len(ydata)):
print(ydata[i])
return ydata
最近的 python 版本还包括对 type annotations
的支持
import numpy as np
def get_ydata(xdata: np.ndarray):
...
TL;DR 使用 list() 进行转换
晚了,还在,
我在使用其他一些代码时遇到了类似的问题。
我可以通过类似于
的方法来解决它
def get_ydata(xdata):
ydata = list(xdata ** 2)
for i in range(len(ydata)):
print ydata[i]
return ydata
考虑 。对我的回答的评论有效。
我从 PyCharm 收到代码检查警告。我理解其中的逻辑,但我不清楚修复它的适当方法。假设我有以下示例函数:
def get_ydata(xdata):
ydata = xdata ** 2
for i in range(len(ydata)):
print ydata[i]
return ydata
我收到 2 条警告:
>> Expected type 'Sized', got 'int' instead (at line 3)
>> Class 'int' does not define '__getitem__', so the '[]' operator cannot be used on its instances (at line 4)
函数的目的当然是解析一个numpy的xdata数组。但是 PyCharm 不知道这一点,因此在没有任何进一步说明的情况下假定 xdata(因此也是 ydata)是一个整数。
解决此警告的适当方法是什么?我应该注意,添加类型检查行将修复警告。那是最优解吗?例如:
if not type(ydata) is np.ndarray:
ydata = np.array(ydata)
最后,添加 Sphinx 文档字符串信息似乎对警告没有任何影响。 (当 xdata 指定为 str 时,警告仍然显示 'int')。同样迭代 y 直接导致以下错误:
for y in ydata:
...
>> Expected 'collections.Iterable', got 'int' instead
Pycharm 有 type hinting 个可能有用的功能。
例如在这种情况下,以下代码使错误消失:
import numpy as np
def get_ydata(xdata):
ydata = xdata ** 2 # type: np.ndarray
for i in range(len(ydata)):
print(ydata[i])
return ydata
最近的 python 版本还包括对 type annotations
的支持import numpy as np
def get_ydata(xdata: np.ndarray):
...
TL;DR 使用 list() 进行转换
晚了,还在,
我在使用其他一些代码时遇到了类似的问题。
我可以通过类似于
的方法来解决它def get_ydata(xdata):
ydata = list(xdata ** 2)
for i in range(len(ydata)):
print ydata[i]
return ydata
考虑