python / python/mypy

Unpacking int arguments to datetime.datetime gives a complaint about tzinfo

Abierto
#10,348 2 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

bug
Lenguaje dominante
Python
Estrellas
20.6k
Forks
3.3k
Métricas de merge de PR
Métricas de PR pendientes

Descripción

Bug Report

mypy complains about this line of code. First I don't understand why and second I cannot bring it to accept it, even when including tzinfo=None in the parameter list.

# error: "datetime" gets multiple values for keyword argument "tzinfo"
dt.datetime(*split_int_string(date, 4, 6, 8), *split_int_string(time, 2, 4))

# or

# error: "datetime" gets multiple values for keyword argument "tzinfo"
dt.datetime(*split_int_string(date, 4, 6, 8), *split_int_string(time, 2, 4), tzinfo=None)

Why does mypy think tzinfo would already be used, it cannot be from a List[int]. The behavior when running is as expected.

The helper function is annotated like this:

def split_int_string(digits: str, *at: int) -> List[int]:
    """
    Split a string at given indices and parse the parts to int.
    """
    # Make a canonical representation.
    split: List[int] = sorted(at)
    if not split or split[0] != 0:
        split.insert(0, 0)
    if split[-1] != len(digits):
        split.append(len(digits))
    return [int(digits[split[i - 1] : split[i]]) for i in range(1, len(split))]

To Reproduce

(Write your steps here:)

  1. Paste from here into a file.
  2. Run with python3, it works.
  3. Pass to mypy to see the error.

Expected Behavior

I expect not to get a typing error for that line.

Actual Behavior

It prints

error: Argument 1 to "datetime" has incompatible type "*List[int]"; expected "Optional[tzinfo]"

or

error: "datetime" gets multiple values for keyword argument "tzinfo"

depending on whether one also adds the tzinfo=None or not.

Your Environment

  • Mypy version used: 0.812
  • Mypy command-line flags: none
  • Mypy configuration options from mypy.ini (and other config files): none
  • Python version used: 3.8.6
  • Operating system and version: Linux CL003356 4.19.128-microsoft-standard #1 SMP Tue Jun 23 12:58:10 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

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 con el reproductor pegado enlazado en el issue e inspecciona cómo mypy analiza las llamadas a datetime.datetime con múltiples argumentos List[int] desempaquetados. Confirma el diagnóstico relacionado con tzinfo y compáralo después con el comportamiento en tiempo de ejecución mostrado en el informe. Se considera terminado cuando la llamada válida ya no produce el error de tipado incorrecto, mientras que los conflictos de argumentos reales siguen siendo diagnosticados.

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
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.