python / python/mypy

Wrong truthy-function with a constrained TypeVar

Aperta
#15,720 2 commenti 2 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

bug topic-type-variables
Lingua principale
Python
Stelle
20.6k
Fork
3.3k
Metriche di merge delle PR
Metriche PR in attesa

Descrizione

Bug Report

from typing import Callable, Collection, TypeVar

T = TypeVar("T", Callable[[], int], Collection[int])

def test(x: T) -> bool:
    if not x:
        return False
    return True

https://mypy-play.net/?mypy=latest&python=3.11&gist=ab304abd8323804aba46fb9227d6fbb2

Expected Behavior

The if condition is used for both functions and collections. It's used to filter out empty collections. This should type check without errors.

Actual Behavior

mypy returns an error which assumes that x can only be a function:

truthy_function.py:6: error: Function "x" could always be true in boolean context  [truthy-function]

Your Environment

  • Mypy version used: 1.4.1 (compiled: yes)
  • Python version used: 3.10.11

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Riproduci l’esempio nella configurazione mypy-play collegata con Python 3.11 e analizza la diagnostica [truthy-function] segnalata in truthy_function.py:6. Traccia la gestione dei valori TypeVar vincolati nei contesti booleani, quindi verifica che l’esempio Callable/Collection venga controllato dal punto di vista dei tipi senza l’avviso errato.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
devtools
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.