Variadic tuple unpacking requires a star target -- why?
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 20.6k
- Fork
- 3.3k
- Metriche di merge delle PR
- Metriche PR in attesa
Descrizione
Bug Report
When attempting to unpack a tuple that uses Unpack, if you don't use a star target to capture the variadic tuple as a list, you get the error Variadic tuple unpacking requires a star target.
This is overly strict and prescriptivist and is not even applied consistently between similar type concepts within mypy.
- You definitely can do this if the lengths check out.
pyrightdoesn't raise an error like this. You are simply on your own for length checking the unpacking of indeterminate lengthtuples, just like you are forlist, another indeterminate length unpackable sequence.- In fact, this is also how
mypytreats unpackinglist. It doesn't raise an error if you don't use a star target. - I have a real use case where I want to do exactly this. I lay out my use case in this bug report to
pyright: https://github.com/microsoft/pyright/issues/7987
To Reproduce
from typing import Tuple
from typing_extensions import Unpack
def foo() -> Tuple[int, Unpack[Tuple[str, ...]]]:
return 1, "bar", "baz"
a, b, c = foo() # error: Variadic tuple unpacking requires a star target [misc]
d, e, f = [1, "bar", "baz"] # OK
Gist URL: https://gist.github.com/mypy-play/4014976ca069e54b5c1fe86a45353f58
Playground URL: https://mypy-play.net/?mypy=master&python=3.12&gist=4014976ca069e54b5c1fe86a45353f58
Expected Behavior
No errors in the above example. a's type should be revealed to be int, and b and c's types should be revealed to be str.
Actual Behavior
An error, and a, b, and c are all revealed to be Any.
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia con la riproduzione minima nel report o con il relativo URL di mypy-play e confronta la diagnostica e i tipi rivelati per l’unpacking di tuple e liste. È completato quando l’assegnazione della tupla non produce errori, rivela a come int e b e c come str, e non introduce regressioni nel caso della lista.
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
- 42/100