python / python/mypy

Assignment via `import`

オープン
#12,965 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

bug topic-type-narrowing
主要言語
Python
スター
20.6k
フォーク
3.3k
PR マージ指標
PR 指標を取得中

説明

In the following example MyPy complain about local import and does not recognize it as assignment:

from typing import Callable, Optional

def f(callable: Optional[Callable[[float], float]]) -> None:
    if callable is None:
        from math import sqrt as callable  # line 5

    callable(1.5)  # line 7

Output:

t3.py:5: error: Name "callable" already defined on line 3
t3.py:7: error: "None" not callable
Found 2 errors in 1 file (checked 1 source file)

It is not recognized as assignment even for global import:

from typing import Callable, Optional

callable: Optional[Callable[[float], float]] = None
if callable is None:
    from math import sqrt as callable

callable(1.5)  # line 7

Output:

t32.py:7: error: "None" not callable
Found 1 error in 1 file (checked 1 source file)

mypy 0.950 (compiled: yes)
Python 3.9.12

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

まず、2つのインライン Python 再現コードを mypy 0.950 で実行し、ローカルインポートとグローバルインポートについて報告されたエラーを比較します。これらのインポートエイリアスがどのように解析されるかを追跡し、その後、条件付きインポートの後に callable が認識され、誤った診断がなくなることを示す回帰テストカバレッジを追加します。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
python
領域
devtools
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
38/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。