python / python/mypy

NamedTuple with dependent default values causes unexpected 'Name is not defined' errors

Abierto
#8,178 1 comentario 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

false-positive needs discussion priority-1-normal topic-named-tuple
Lenguaje dominante
Python
Estrellas
20.6k
Forks
3.3k
Métricas de merge de PR
Métricas de PR pendientes

Descripción

Hi there,

When there is a NamedTuple with a default value that depends on one or more other default values, followed by a default value that should resolve into a NameError, all preceding default values get the Name <variable> is not defined error as well.

E.g.

from typing import NamedTuple

class Example(NamedTuple):
    a: int = 1
    b: int = 2
    c: int = a*b
    d: int = does_not_exist*5

Causes:

scratch.py:6: error: Name 'a' is not defined
scratch.py:6: error: Name 'b' is not defined
scratch.py:7: error: Name 'does_not_exist' is not defined

If I comment out line 6, I do, however, get the expected result.

from typing import NamedTuple

class Example(NamedTuple):
    a: int = 1
    b: int = 2
    # c: int = a*b
    d: int = does_not_exist*5
scratch.py:7: error: Name 'does_not_exist' is not defined

This was tried on version 0.760.

$ mypy --version
mypy 0.760

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza reproduciendo el problema del ejemplo de NamedTuple en scratch.py usando mypy 0.760 y, después, inspecciona la ruta de comprobación de tipos de NamedTuple responsable de los valores predeterminados. Compara el caso de valor predeterminado dependiente con la versión en la que c está comentado. Se considera terminado cuando se informa del nombre indefinido en d sin errores espurios para a, b o c.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
python
Área
tooling
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bien especificado
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.