python / python/mypy

Checking elements of a `list[str | None]` after discarding the possibility of `None`

Ouverte
#16,243 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

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

Description

Bug Report

str_none: list[str | None]
only_str: list[str]
for i in range(len(sequence)):
    if sequence[i] is not None:
        only_str.append(sequence[i]) # Here mypy raises an error due to "incompatible types"

The code above raises the following error Argument 1 to "append" of "list" has incompatible type "str | None"; expected "str".

I've found the following verbose workaround but to my taste its :

str_none: list[str | None]
only_str: list[str]
for i in range(len(sequence)):
    element = sequence[i]
    if element is not None:
        only_str.append(element)

To Reproduce

See code example above.

Expected Behavior

I'm expecting mypy to be able to predict future annotations of sequences with multiple types possible after discarding a specific type in a condition.

Actual Behavior

All is included above.

Your Environment

  • Mypy version used: 1.5.1
  • Mypy command-line flags: both --strict and none
  • Mypy configuration options from mypy.ini (and other config files):
  • Python version used: 3.11.5

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 le reproducteur minimal de l’issue avec mypy 1.5.1, puis suivez le comportement de la réduction de type pour l’accès indexé aux séquences. Le travail sera terminé lorsque l’exemple acceptera l’élément dont le type a été réduit sans le contournement verbeux utilisant une variable locale, avec un test de régression couvrant le cas signalé.

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

Évaluation

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

Recevez les nouvelles issues par e-mail

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