python / python/mypy

False positive unreachable statement after exception raised within context block

Ouverte
#8,766 5 commentaires 6 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

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

Description

import contextlib
from typing import Iterator

@contextlib.contextmanager
def context_func() -> Iterator[None]:
    try:
        yield
    except Exception:
        pass

def foo() -> None:
    with context_func():
        raise Exception

    print("xxx")  # mypy: Statement is unreachable

Since context managers can silence exceptions, I don't think mypy should consider statements after the context to be unreachable due to exceptions which might be raised within the context.

Flags needed: --warn-unreachable.


Python 3.6, mypy 0.770, also master (at 2a3de7b7941f24b6bc53fe0cf8a2b7f8f7fd4e15)

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 l’exemple fourni avec Python et l’option --warn-unreachable de mypy, en comparant l’avertissement après le bloc de contexte avec le comportement attendu. Suivez l’analyse par mypy des exceptions levées à l’intérieur d’un gestionnaire de contexte et vérifiez qu’un gestionnaire de contexte qui intercepte l’exception ne rend pas l’instruction suivante inaccessible.

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
45/100

Recevez les nouvelles issues par e-mail

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