python / python/mypy

Type of list items not inferred when using `isinstance` inside `all`

Aperta
#7,853 2 commenti 6 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

feature priority-1-normal topic-type-narrowing
Lingua principale
Python
Stelle
20.6k
Fork
3.3k
Metriche di merge delle PR
Metriche PR in attesa

Descrizione

The type of items in a list is not inferred when using an isinstance check in an all call.

from typing import List

class A:
    pass

class B(A):
    pass

def test(arg: List[A]) -> None:
    if all([isinstance(a, B) for a in arg]):
        test2(arg)

def test2(arg: List[B]) -> None:
    pass
  • What is the actual behavior/output?

error: Argument 1 to "test_2" has incompatible type "List[A]"; expected "List[B]"
Found 1 error in 1 file (checked 1 source file)

  • What is the behavior/output you expect?

I expect mypy to infer the type of the list items based on the if check.

  • What are the versions of mypy and Python you are using?

mypy: v0.740
python: 3.6.7

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

Non è indicato alcun file sorgente o test. Prima riproduci l’esempio con mypy v0.740, poi traccia come vengono analizzati il controllo isinstance all’interno di all e la list comprehension. Il lavoro è completato quando l’esempio restringe List[A] a List[B] senza l’errore segnalato e dispone di una copertura di regressione.

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

Valutazione

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

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.