Предупреждение PyCharm getitem для функций с массивами

Я получаю предупреждения о проверке кода от 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 docstring не оказывает никакого влияния на предупреждения. (предупреждение по-прежнему видит "int", когда xdata указан как str). Также итерация по y напрямую приводит к следующей ошибке:

for y in ydata:
...
>> Expected 'collections.Iterable', got 'int' instead

1 ответов


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