Ich habe gerade den folgenden "minimalen" Repro-Fall zusammengestellt (Minimum in Anführungszeichen, weil ich sicherstellen wollte, dass pylintkeine 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 pylintdiesen 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.shapenicht 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 pylintzu 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 NumPYMethoden ( arangevs zerosvs fullusw.) darauf hindeutet, dass es sich nur um einen Fehler handelt NumPY. Es ist jedoch möglich, NumPYdass ich ein Missverständnis habe. Ich möchte sichergehen, dass ich keinen Code mit undefiniertem Verhalten schreibe, der nur bei Unfällen funktioniert.
pylintvorher beschuldigennumpy