Ich habe gerade den folgenden "minimalen" Repro-Fall zusammengestellt (Minimum in Anführungszeichen, weil ich sicherstellen wollte, dass pylint
keine anderen Fehler, Warnungen, Hinweise oder Vorschläge ausgegeben wurden - was bedeutet, dass es ein bisschen Boilerplate gibt):
pylint_error.py :
"""
Docstring
"""
import numpy as np
def main():
"""
Main entrypoint
"""
test = np.array([1])
print(test.shape[0])
if __name__ == "__main__":
main()
Wenn ich pylint
diesen Code ( pylint pylint_error.py
) ausführe, erhalte ich die folgende Ausgabe:
$> 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)
Es wird behauptet, dass dies test.shape
nicht abonnierbar ist, obwohl es ganz klar ist. Wenn ich den Code ausführe, funktioniert es einwandfrei:
$> python pylint_error.py
1
Was führt also pylint
zu Verwirrung und wie kann ich das beheben?
Einige zusätzliche Hinweise:
- Wenn ich den Test deklariere, verschwindet
np.arange(1)
der Fehler - Wenn ich Test erklären , wie
np.zeros(1)
,np.zeros((1))
,np.ones(1)
odernp.ones((1))
der Fehler nicht nicht weggehen - Wenn ich den Test deklariere, verschwindet
np.full((1), 1)
der Fehler - Die Angabe der Art (
test: np.ndarray = np.array([1])
) nicht nicht beheben den Fehler - Die Angabe eines
dtype
(np.array([1], dtype=np.uint8)
) nicht nicht den Fehler beheben - Wenn Sie ein Stück test (
test[:].shape
) nehmen, verschwindet der Fehler
Mein erster Instinkt besagt, dass das inkonsistente Verhalten mit verschiedenen NumPY
Methoden ( arange
vs zeros
vs full
usw.) darauf hindeutet, dass es sich nur um einen Fehler handelt NumPY
. Es ist jedoch möglich, NumPY
dass ich ein Missverständnis habe. Ich möchte sichergehen, dass ich keinen Code mit undefiniertem Verhalten schreibe, der nur bei Unfällen funktioniert.
pylint
vorher beschuldigennumpy