Optional types not being narrowed after a logical-and followed by a test of one of the operands
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 20.6k
- Forks
- 3.3k
- Métriques de merge des PR
- Métriques de PR en attente
Description
(Sorry if the title is overly specific)
- Are you reporting a bug, or opening a feature request?
Bug
- Please insert below the code you are checking with mypy,
or a mock-up repro if the source is private. We would appreciate
if you try to simplify your case to a minimal repro.
from typing import Optional
def get_org_id(org_name: str) -> str:
return 'some_org_id'
def create(org_name: Optional[str], org_id: Optional[str]):
if not org_name and not org_id:
raise ValueError('No org specified')
if not org_id:
org_id = get_org_id(org_name)
- What is the actual behavior/output?
The inferred type of org_name at the last line is Optional[str] (technically Union[builtins.str, None]).
- What is the behavior/output you expect?
The type should be narrowed to str.
- What are the versions of mypy and Python you are using?
Do you see the same issue after installing mypy from Git master?
Python 3.7.3
mypy: 0.701
- What are the mypy flags you are using? (For example --strict-optional)
No flags
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par la reproduction minimale en Python présente dans l’issue et confirmez le type inféré de org_name après les conditions de et logique. Suivez le comportement du rétrécissement de type pour org_name et org_id, puis ajoutez une couverture pour ce cas. Le travail est terminé lorsque org_name est inféré comme str lors de l’appel à get_org_id, sans casser le rétrécissement de type optionnel associé.
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é
- Clairement spécifiée
- Accessibilité débutants
- 35/100