Incorrect narrowing of Enum.Flag
Mantenedores costumam responder em até 1 dia
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 3/5
- Tempo estimado
- 1-2 dias
- Facilidade para iniciantes
- 65/100
Direção de pesquisa
Comece reproduzindo o exemplo relatado de narrowing de Enum.Flag com o snippet Python e a configuração do mypy fornecidos. Rastreie o narrowing realizado após as comparações com Programs.NONE e Programs.P2 e, em seguida, adicione um teste de regressão para verificações de associação, como Programs.P1 in programs. A tarefa estará concluída quando o exemplo não produzir nenhum aviso de operando não compatível.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Bug Report
Incorrect narrowing of Enum.Flag
To Reproduce
from enum import Flag, auto
from pathlib import Path
from tempfile import NamedTemporaryFile
def p1(path: str) -> None: ...
def p2(path: str) -> None: ...
def p2_fast(data: str) -> str: ... # type: ignore[empty-body]
def p3(path: str) -> None: ...
class Programs(Flag):
NONE = 0
P1 = auto()
P2 = auto()
P3 = auto()
ALL = P1 | P2 | P3
def f(data: str, programs: Programs) -> str:
if programs == Programs.NONE:
return data
if programs == Programs.P2:
return p2_fast(data)
with NamedTemporaryFile("w", encoding="utf-8", delete=False) as tmp:
tmp.write(data)
tmp.close()
if Programs.P1 in programs:
p1(tmp.name)
if Programs.P3 in programs:
p3(tmp.name)
if Programs.P2 in programs:
p2(tmp.name)
return Path(tmp.name).read_text("utf-8")
Expected Behavior
no warning
Actual Behavior
main.py:32: error: Unsupported operand types for in ("Programs" and "Literal[Programs.P1, Programs.P3, Programs.ALL]") [operator]
Your Environment
- Mypy version used: 2.3.1
- Mypy command-line flags: no
- Mypy configuration options from
mypy.ini(and other config files): no - Python version used: 3.14
- Linguagem predominante
- Python
- Estrelas
- 20.6k
- Forks
- 3.3k
- Merge médio
- 1d 1h
- PRs com merge (30d)
- 61
Preparar o ambiente
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de python/mypy
-
bug documentation
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 90/100
python/mypy#22057 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
Mantenedores costumam responder em até 1 dia
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
Mantenedores costumam responder em até 1 dia
-
documentation
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
python/mypy#21658 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
bug topic-configuration topic-error-reporting
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
python/mypy#21376 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
Todas as issues de python/mypy
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 86/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-2 dias Facilidade para iniciantes 70/100
-
FingerprintSplitter raises ZeroDivisionError when int(frac_train * len(dataset)) floors to zeroAberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
Mantenedores costumam responder em até 7 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
lmstudio-ai/mlx-engine#376 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
pyiron/bagofholding#166 ·