web-dev-qa-db-ja.com

PyLintはなぜnumpy.ndarray.shapeの場合は `unscuscriptable-object`を返しますか?

私は以下の「最小」REPROケースをまとめて(pylintを確実に投げることを望んでいましたが、他のエラー、警告、ヒント、または提案を投げることを望んでいたので、引用符で囲みます。

pylint_error.py

"""
Docstring
"""

import numpy as np


def main():
    """
    Main entrypoint
    """
    test = np.array([1])
    print(test.shape[0])


if __name__ == "__main__":
    main()

このコードでpylintを実行すると(pylint pylint_error.py)次の出力が得られます。

$> 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)

test.shapeは、それが非常に明確であってもサブスクリプション不可能ではないと主張しています。コードを実行するとうまく機能します。

$> python pylint_error.py
1

それで、pylintを混乱させるようにするのは何ですか、そしてそれを修正する方法は?

追加のメモ:

  • テストをnp.arange(1)として宣言した場合、エラーは消えます
  • テストをnp.zeros(1)np.zeros((1))np.ones(1)、またはnp.ones((1))として宣言した場合、エラーはnot去る
  • テストをnp.full((1), 1)として宣言した場合、エラーは消えます
  • タイプの指定(test: np.ndarray = np.array([1]))はエラーを修正する
  • dtypenp.array([1], dtype=np.uint8))を指定する_( _ _ _ _ _ _ _ _
  • テストのスライスを取る(test[:].shape)エラーが消えます

私の最初の本能は、さまざまなNumPYメソッド(arange vs zeros vs fullなど)との矛盾する行動がNumPYのバグであることを示唆しています。しかし、誤解されているNumPYに根本的な概念がある可能性があります。事故に勤めているだけではない行動でコードを書いていないことを確認したいと思います。

11
stevendesu

2020年5月のアストロイド2.4.0のリリースでこれを最終的に固定した。

https://github.com/pycqa/pylint/issues/3139

0
Tomi Aarnio