python / python/mypy

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

Ouverte
#10,348 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

bug
Langage dominant
Python
Étoiles
20.6k
Forks
3.3k
Métriques de merge des PR
Métriques de PR en attente

Description

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

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par le reproducteur collé lié dans l’issue et examinez comment mypy analyse les appels à datetime.datetime avec plusieurs arguments List[int] dépaquetés. Confirmez le diagnostic concernant tzinfo, puis comparez-le au comportement à l’exécution montré dans le rapport. Le travail est terminé lorsque l’appel valide ne produit plus l’erreur de typage incorrecte, tandis que les véritables conflits d’arguments continuent d’être diagnostiqués.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
devtools
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.