Optional strict checking of *args and/or multiple assignment
Nadie ha tomado este issue todavía.
- 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
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
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