python / python/mypy

variance okay for literals, but not expressions ([1, 2] okay for list[int | None] but [1] + [2] is error)

Ouverte
#16,623 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

bug topic-type-context
Langage dominant
Python
Étoiles
20.6k
Forks
3.3k
Métriques de merge des PR
Métriques de PR en attente

Description

a: list[int | None] = [1] + [2] + [None]
b: list[int | None] = [1] + [2]
c: list[int | None] = [1, 2]

a is okay, b is an error, c is okay

Apologies if this is a repeat / common issue. I couldn't find anything in the docs. This is popping up for me a lot, my interpretation is that mypy allows type invariance on literals that it will not for expressions.

To Reproduce

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

Expected Behavior

Either b and c should both be errors or (preferably) neither.

Actual Behavior

b is an error but c isn't

Your Environment

  • Mypy version used: 1.7.1 and master
  • Python version used: 3.11

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par exécuter la reproduction mypy-play liée avec mypy 1.7.1 ou master et Python 3.11, en comparant les diagnostics pour les affectations a, b et c. C’est terminé lorsque le comportement de [1] + [2] correspond à celui de [1, 2], conformément au comportement attendu indiqué dans l’issue.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
compilers
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.