Rather confusing error message when argument name is wrong
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
Bug Report
from typing import Any, Awaitable, Callable, Protocol, Union, TypeVar, Generic
class IRequest:
pass
KleinSynchronousRenderable = Union[str, bytes]
KleinRenderable = Union[
KleinSynchronousRenderable, Awaitable[KleinSynchronousRenderable]
]
T_co = TypeVar('T_co', contravariant=True)
class KleinRoute(Protocol[T_co]):
def __call__(v, /, self: T_co, request: IRequest) -> KleinRenderable:
"""
Function that, when decorated by L{Klein.route}, handles a Klein
request.
"""
class Klein(Generic[T_co]):
def route(self, url: str, *args: Any, **kwargs: Any) -> Callable[[KleinRoute[T_co]], KleinRoute[T_co]]:
"""
Decorator for endpoint routing.
"""
class Application:
klein: Klein[Application] = Klein()
@klein.route("/foo")
def foo(self, resource: IRequest) -> KleinRenderable:
pass
You get this error:
main.py:34: error: Argument 1 has incompatible type "Callable[[Application, IRequest], Union[Union[str, bytes], Awaitable[Union[str, bytes]]]]"; expected "KleinRoute[Application]"
Using mypy 0.790 on Python 3.9.
If you change the resource argument to route (second to last line), this passes. The above error suggests a different problem entirely, so it had us chasing our tails a bit.
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
Empieza ejecutando la reproducción proporcionada de mypy 0.790 en Python 3.9 y compara el diagnóstico cuando el parámetro se llama resource en lugar de route. Sigue el código que da formato a este error de argumento incompatible; el trabajo estará terminado cuando un nombre de argumento incorrecto produzca un diagnóstico que señale el problema real del nombre del parámetro, en lugar de informar únicamente de un tipo incompatible.
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
- Bastante claro
- Aptitud para principiantes
- 45/100