Acabo de armar el siguiente caso de repro "mínimo" (mínimo entre comillas porque quería asegurarme de que pylint
no arroje otros errores, advertencias, sugerencias o sugerencias, lo que significa que hay un poco de repetitivo):
pylint_error.py :
"""
Docstring
"""
import numpy as np
def main():
"""
Main entrypoint
"""
test = np.array([1])
print(test.shape[0])
if __name__ == "__main__":
main()
Cuando ejecuto pylint
este código ( pylint pylint_error.py
) obtengo el siguiente resultado:
$> 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)
Afirma que test.shape
no es subscriptable, aunque claramente lo es. Cuando ejecuto el código funciona bien:
$> python pylint_error.py
1
Entonces, ¿qué está causando pylint
confusión y cómo puedo solucionarlo?
Algunas notas adicionales:
- Si declaro la prueba ya que
np.arange(1)
el error desaparece - Si Declaro prueba como
np.zeros(1)
,np.zeros((1))
,np.ones(1)
, onp.ones((1))
el error no no desaparece - Si declaro la prueba ya que
np.full((1), 1)
el error desaparece - Especificar el tipo (
test: np.ndarray = np.array([1])
) no corrige el error - Especificar a
dtype
(np.array([1], dtype=np.uint8)
) no corrige el error - Tomar una porción de prueba (
test[:].shape
) hace que el error desaparezca
Mi primer instinto dice que el comportamiento inconsistente con varios NumPY
métodos ( arange
vs zeros
vs full
, etc.) sugiere que es solo un error NumPY
. Sin embargo, es posible que haya algún concepto subyacente NumPY
que no entiendo. Me gustaría estar seguro de que no estoy escribiendo código con un comportamiento indefinido que solo funciona por accidente.
pylint
antesnumpy