PyCharm getitem警告带有数组的函数



我收到PyCharm的代码检查警告。我理解其中的逻辑,但我不清楚如何修复它。假设我有以下示例功能:

def get_ydata(xdata):
    ydata = xdata ** 2
    for i in range(len(ydata)):
        print ydata[i]
return ydata

我收到两个警告:

>> 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具有可能有用的类型提示功能。

例如,在这种情况下,以下代码使错误消失:

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版本还支持类型注释

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

考虑已接受的答案。对我的回答的评论是有效的。

最新更新