Ho appena messo insieme il seguente caso di repro "minimo" (minimo tra virgolette perché volevo assicurarmi di pylint
non 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 pylint
questo 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.shape
non è sottoscrivibile, anche se lo è chiaramente. Quando eseguo il codice funziona perfettamente:
$> python pylint_error.py
1
Quindi cosa sta causando pylint
confusione 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 NumPY
metodi ( arange
vs zeros
vs full
, ecc.) Suggerisce che si tratti solo di un bug NumPY
. Tuttavia è possibile che ci sia un concetto alla base del fatto NumPY
che sono frainteso. Mi piacerebbe essere sicuro di non scrivere codice con un comportamento indefinito che funziona solo in caso di incidente.
pylint
Primanumpy