Ho appena messo insieme il seguente caso di repro "minimo" (minimo tra virgolette perché volevo assicurarmi di pylintnon aver lanciato altri errori, avvertenze, suggerimenti o suggerimenti - il che significa che c'è un po 'di boilerplate):
pylint_error.py :
"""
Docstring
"""
import numpy as np
def main():
"""
Main entrypoint
"""
test = np.array([1])
print(test.shape[0])
if __name__ == "__main__":
main()
Quando eseguo pylintquesto codice ( pylint pylint_error.py) ottengo il seguente output:
$> pylint pylint_error.py
************* Module pylint_error
pylint_error.py:13:10: E1136: Value 'test.shape' is unsubscriptable (unsubscriptable-object)
------------------------------------------------------------------
Your code has been rated at 1.67/10 (previous run: 1.67/10, +0.00)
Afferma che test.shapenon è sottoscrivibile, anche se lo è chiaramente. Quando eseguo il codice funziona perfettamente:
$> python pylint_error.py
1
Quindi cosa sta causando pylintconfusione e come posso risolverlo?
Alcune note aggiuntive:
- Se dichiaro il test poiché
np.arange(1)l'errore scompare - Se io dichiaro di prova come
np.zeros(1),np.zeros((1)),np.ones(1), onp.ones((1))l'errore non non va via - Se dichiaro il test poiché
np.full((1), 1)l'errore scompare - Specificando il tipo (
test: np.ndarray = np.array([1])) non si corregge l'errore - Specificando a
dtype(np.array([1], dtype=np.uint8)) non si corregge l'errore - Prendendo una fetta di test (
test[:].shape), l'errore scompare
Il mio primo istinto afferma che il comportamento incoerente con vari NumPYmetodi ( arangevs zerosvs full, ecc.) Suggerisce che si tratti solo di un bug NumPY. Tuttavia è possibile che ci sia un concetto alla base del fatto NumPYche sono frainteso. Mi piacerebbe essere sicuro di non scrivere codice con un comportamento indefinito che funziona solo in caso di incidente.
pylintPrimanumpy