python / python/mypy

Optional strict checking of *args and/or multiple assignment

Abierto
#7,408 1 comentario 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

feature needs discussion topic-calls
Lenguaje dominante
Python
Estrellas
20.6k
Forks
3.3k
Métricas de merge de PR
Métricas de PR pendientes

Descripción

Currently mypy does optimistic checking of *args -- we don't generate error if it could be valid. This seems like a reasonable default, since it avoids false positive errors. However, some users might prefer stricter checking as an option. When this option is enabled, mypy would only allow variable-length (non-Any) *args in a call if the callee also accepts *args.

Example:

def f(a: int) -> None: pass

x = [1, 2]
f(*x)  # Currently accepted, since mypy doesn't know the length of x

PR #7392 relaxed the rules so that we assume that any list *args argument could be empty and thus we don't complain about even if a caller *args argument is only valid when it's empty.

Similarly this option (or a similar option) could reject variable-length rvalues in multiple assignment like this:

x = [1, 2]
a, b, c = x  # Currently accepted

If we'd have support for enabling/disabling specific error codes, these checks could easily be implemented through error codes that are disabled by default.

Refactoring code such as the above (if correct) to pass mypy could be somewhat painful, however. It could be written like this:

def f(a: int, b: int) -> None: pass

def g(x: List[int]) -> None:
    assert len(x) == 2
    f(x[0], x[1])

(Of course, a # type: ignore would also work.)

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

No se nombran archivos fuente ni pruebas. Empieza revisando PR #7392 y el manejo existente de argumentos de longitud variable con *args y de las asignaciones múltiples; el trabajo estaría terminado cuando se haya decidido un diseño opcional de comprobación estricta para estos casos, incluido cómo se habilitan las comprobaciones.

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

Evaluación

Stack tecnológico
python
Área
compilers
Tipo de issue
Nueva funcionalidad
Dificultad
5/5
Tiempo estimado
Más de una semana
Estado de actividad
Estancado
Claridad
Necesita aclaración
Aptitud para principiantes
25/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.