Ricevo avvisi di ispezione del codice da PyCharm. Capisco la logica, ma non sono chiaro sul modo appropriato per risolverlo. Dire Ho la seguente funzione di esempio:Avviso Pyrep Getitem per funzioni con array
def get_ydata(xdata):
ydata = xdata ** 2
for i in range(len(ydata)):
print ydata[i]
return ydata
ottengo 2 avvisi:
>> 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)
Lo scopo della funzione è naturalmente per analizzare una matrice di NumPy xdata. Ma PyCharm non lo sa, quindi senza ulteriori indicazioni si assume che xdata (e quindi anche ydata) sia un numero intero.
Qual è il modo appropriato per rispondere a questo avviso? Devo notare che l'aggiunta di una riga di controllo del tipo risolverà l'avviso. È la soluzione ottimale? Per esempio:
if not type(ydata) is np.ndarray:
ydata = np.array(ydata)
Infine, aggiungendo Sfinge informazioni docstring non sembra avere alcun effetto sulle avvertenze. (l'avviso vede ancora 'int' quando xdata è specificato come str). Anche l'iterazione di y traduce direttamente nella seguente errore:
for y in ydata:
...
>> Expected 'collections.Iterable', got 'int' instead
Perché non basta iterare 'ydata' direttamente? Inoltre, si noti che è possibile utilizzare il markup Sphinx per dire a PyCharm quali sono i parametri: https://www.jetbrains.com/pycharm/help/creating-documentation-comments.html – jonrsharpe
Per quanto riguarda lo stile, ci sono motivi per cui utilizzo un indicizzazione approccio basato, piuttosto che iterando direttamente su ydata. A parte questo, ho appena controllato e le didascalie basate su Sphinx non sembrano avere alcun effetto sull'avviso. Ad esempio, specificando xdata come str, si ottiene comunque lo stesso errore 'previsto int', quindi sembra che non venga preso in considerazione. Inoltre, l'iterazione su ydata direttamente ha come risultato solo il seguente errore: "Previsto" collezioni.Iteribili ", ottenuto invece" int ". Aggiornerò la mia domanda di conseguenza –
Ricorda che una delle tue opzioni è semplicemente ignorarla - dopotutto è solo un avvertimento. – jonrsharpe