deleting a class-scoped variable that shadows a global variable causes mypy to think it's undefined
Abierto
Nadie ha tomado este issue todavía.
bug
topic-runtime-semantics
topic-variable-scope
- Lenguaje dominante
- Python
- Estrellas
- 20.6k
- Forks
- 3.3k
- Métricas de merge de PR
- Métricas de PR pendientes
Descripción
To Reproduce
from typing import Callable, TypeVar
T = TypeVar("T")
x = 1
def decorate(num: int) -> Callable[[T], T]:
def thru(it: T) -> T:
print("decorating", it, "with", num)
return it
return thru
class y(object):
@decorate(x)
def a(self) -> None:
...
x = 2
@decorate(x)
def b(self) -> None:
...
del x
@decorate(x)
def c(self) -> None:
...
Expected Behavior
This is perfectly valid, it should not cause an error! It works at runtime.
Actual Behavior
$ mypy class_scope.py
class_scope.py:28: error: Trying to read deleted variable 'x'
Found 1 error in 1 file (checked 1 source file)
Your Environment
- Mypy version used: 0.790
- Mypy command-line flags: all defaults
- Mypy configuration options from
mypy.ini(and other config files): no mypy.ini - Python version used: Python 3.8.5
- Operating system and version:
ProductName: Mac OS X
ProductVersion: 10.15.7
BuildVersion: 19H2
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Reproduce el problema del ejemplo class_scope.py con mypy, utilizando las versiones indicadas de Python y mypy como referencia. Rastrea cómo gestiona el checker un nombre definido en el ámbito de una clase después de del x y añade después una prueba de regresión que muestre que el uso posterior del decorador no informa de una variable no definida.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- devtools
- Tipo de issue
- Error
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 45/100