Je viens de rassembler le cas de repro "minimum" suivant (minimum entre guillemets parce que je voulais m'assurer qu'il pylintn'y avait pas d'autres erreurs, avertissements, conseils ou suggestions - ce qui signifie qu'il y a un peu de passe-partout):
pylint_error.py :
"""
Docstring
"""
import numpy as np
def main():
"""
Main entrypoint
"""
test = np.array([1])
print(test.shape[0])
if __name__ == "__main__":
main()
Lorsque je lance pylintsur ce code ( pylint pylint_error.py), j'obtiens la sortie suivante:
$> 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)
Il prétend que ce test.shapen'est pas indicable, même s'il l'est très clairement. Lorsque j'exécute le code, cela fonctionne très bien:
$> python pylint_error.py
1
Alors, qu'est-ce qui cause la pylintconfusion et comment puis-je y remédier?
Quelques notes supplémentaires:
- Si je déclare le test alors que
np.arange(1)l'erreur disparaît - Si je déclare test
np.zeros(1),np.zeros((1)),np.ones(1)ounp.ones((1))l'erreur ne pas disparaître - Si je déclare le test alors que
np.full((1), 1)l'erreur disparaît - La spécification du type (
test: np.ndarray = np.array([1])) ne résout pas l'erreur - La spécification d'un
dtype(np.array([1], dtype=np.uint8)) ne résout pas l'erreur - Prendre une tranche de test (
test[:].shape) fait disparaître l'erreur
Mon premier instinct dit que le comportement incohérent avec diverses NumPYméthodes ( arangevs zerosvs full, etc.) suggère que ce n'est qu'un bug NumPY. Cependant, il est possible qu'il y ait un concept sous-jacent à ce NumPYque je comprends mal. Je voudrais être sûr que je n'écris pas du code avec un comportement indéfini qui ne fonctionne que par accident.
pylintavantnumpy