1. ホーム
  2. python

[解決済み] __init__.py で参照 'xxx' が見つかりません。

2022-02-06 14:11:55

質問

PyCharmで以下のような構成のプロジェクトがあります。

-- Sources
   |--__init__.py
   |--Calculators
      |--__init__.py
      |--Filters.py
   |--Controllers
      |--__init__.py
      |--FiltersController.py
   |--Viewers
      |--__init__.py
      |--DataVisualization.py
   |--Models
      |--__init__.py
      |--Data

私のすべての __init__.py は、真上の1つを除いて Sources は空白のファイルです。という警告がたくさん出ています。

__init__.py で参照 'xxx' が見つかりません。

例えば、私の FiltersController.py はこのようなコードを持っています。

import numpy.random as npr

bootstrap = npr.choice(image_base.data[max(0, x-2):x+3, max(0, y-2):y+3].flatten(), size=(3, 3), replace=True)

そして、こんな警告が出ます。

__init__.py で参照 'choice' が見つかりません。

Pythonで正しくコーディングするにはどうしたらいいのだろうと思い、ググっています。

どのように解決するのですか?

これはpycharmのバグです。 PyCharm は、参照するモジュールが __all__ = [] ステートメントを使用します。

コーディングのエチケットとして __all__ という質問に対して、若き日のスポックが「道徳的に賞賛に値するが、義務ではない」と答えているのを耳にしたことがあります。

これを回避するためには、単純にその <ストライク (極めて重要でない) (非常に有用な) 検査をグローバルに、あるいは特定の関数やステートメントに対して抑制することができます。

そのためには

  • エラーとなったテキスト(上の例では「choice」)の上にキャレットを置きます。
  • 意図メニューを表示する(デフォルトではalt-enter、私のはalt-backspaceに設定されている)。
  • 右矢印を押してサブメニューを開き、該当するアクションを選択します。

PyCharmにはこのような小さなバグがありますが、私見ではその利点は欠点をはるかに上回ると思います。 もし他の良いIDEを試したいのであれば、Spyder/Spyderlibもあります。

質問からかなり時間が経ってしまいましたが、これが(あなたや他の誰かの)お役に立てれば幸いです。

編集しました。 元々、チェックに特化したものだと思っていたのですが __all__ しかし、より一般的な「未解決の参照」チェックのようで、これは非常に便利です。 この機能をステートメントレベルで無効にするには、上記のようにメニューを使用するか、あるいは、以下のように指定するのがベストでしょう。 # noinspection PyUnresolvedReferences をステートメントの前の行に追加してください。