python / python/mypy

False positive with disallow-any-explicit and `...` in `Callable` in bound of type var

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

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

bug priority-2-low topic-calls topic-disallow-any
主要言語
Python
スター
20.6k
フォーク
3.3k
PR マージ指標
PR 指標を取得中

説明

I want a generic function type, but I don't want to get spurious Any errors on every usage.

from typing import Callable, TypeVar

Fn = TypeVar("Fn", bound=Callable[..., object])

mypy --disallow-any-explicit .

error: Explicit "Any" is not allowed
    Fn = TypeVar("Fn", bound=Callable[..., object])
    ^

I understand that this is actually usable as unsafe Any garbage:

def foo(fn: Fn) -> Fn:  # type safe usage
    fn(1)  # not type safe usage

So this should be the only place where the error appears.

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

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

はじめの一歩

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

調査の方向性

まず、示されている TypeVar("Fn", bound=Callable[..., object]) の例で mypy --disallow-any-explicit を使って問題を再現し、次に明示的な Any の診断が Callable の bound 内の ... をどのように処理するかを追跡します。Fn を使用するたびに誤ったエラーを生成せず、bound が意図された安全でない Any のケースとして診断されれば完了です。

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

評価

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

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

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