Unpacking int arguments to datetime.datetime gives a complaint about tzinfo
Personne n'a encore pris cette issue.
- 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:)
- Paste from here into a file.
- Run with
python3, it works. - Pass to
mypyto 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
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- 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