2015-03-31 13 views
10

Otrzymuję ostrzeżenia o inspekcji kodu z PyCharm. Rozumiem logikę, ale nie jestem pewien, w jaki sposób ją naprawić. Że mam następującą przykładową funkcję:Ostrzeżenie getitem dla PyCharm dla funkcji z tablicami

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

mam 2 ostrzeżenia:

>> 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) 

Celem tej funkcji jest oczywiście analizować numpy tablicę xdata. Ale PyCharm nie wie o tym, więc bez dalszego wskazania zakłada, że ​​xdata (a więc i ydata) jest liczbą całkowitą.

Jaki jest właściwy sposób rozwiązania tego ostrzeżenia? Powinienem zauważyć, że dodanie linii kontrolnej typu naprawi ostrzeżenie. Czy to jest optymalne rozwiązanie? Na przykład:

if not type(ydata) is np.ndarray: 
    ydata = np.array(ydata) 

Na koniec dodanie informacji o docisku do Sphinx nie ma żadnego wpływu na ostrzeżenia. (ostrzeżenie nadal widzi "int", gdy xdata jest określona jako str). iteracji również nad y bezpośrednio prowadzi do następującego błędu:

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

Dlaczego nie można po prostu iteracyjne nad 'ydata' bezpośrednio? Zwróć też uwagę, że możesz używać znaczników Sphinx, aby poinformować PyCharm o parametrach: https://www.jetbrains.com/pycharm/help/creating-documentation-comments.html – jonrsharpe

+1

Co do stylu, powody, dla których używam indeksowania oparte na podejściu, zamiast iterować bezpośrednio nad ydata. Poza tym, po prostu sprawdziłem, a docstrukcje oparte na Sphinxie nie wydają się mieć żadnego wpływu na ostrzeżenie. Na przykład, podanie xdata jako str, nadal powoduje taki sam błąd "oczekiwany int", więc wydaje się, że nie jest brane pod uwagę. Ponadto, iteracja na ydata bezpośrednio powoduje tylko następujący błąd: "Oczekiwane" kolekcje. Dostępne ", ale zamiast tego" int ". Odpowiednio zaktualizuję moje pytanie. –

+0

Pamiętaj, że jedną z opcji jest po prostu zignorowanie tego - w końcu to tylko ostrzeżenie. – jonrsharpe

Odpowiedz

4

pycharm ma type hinting funkcje, które mogą być użyteczne.

Na przykład w tym przypadku, poniższy kod powoduje, że błędy odejść:

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