python / python/typeshed

Incompatible typing for `logging.Formatter.converter` and `time.gmtime`/`time/localtime` ?

Ouverte
#14,880 4 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

stubs: false positive
Langage dominant
Python
Étoiles
5.1k
Forks
2.1k
Merge moyen
1 j 19 h
PR mergées (30 j)
82

Description

The typing for converter here is as follows:

converter: Callable[[float | None], struct_time]

And the typing for time.gmtime/time.localtime here is:

def gmtime(seconds: float | None = None, /) -> struct_time: ...
def localtime(seconds: float | None = None, /) -> struct_time: ...

Yet when I try to typecheck this code:

import logging
import time

class UTCFormatter(logging.Formatter):
    converter = time.gmtime

I get the following error:

$ mypy main.py
main.py:5: error: Incompatible types in assignment (expression has type "Callable[[], struct_time]", base class "Formatter" defined the type as "Callable[[float | None], struct_time]")  [assignment]
Found 1 error in 1 file (checked 1 source file)

I tested this on a fresh python3.13 venv with the following deps installed:

mypy==1.18.2
mypy_extensions==1.1.0
pathspec==0.12.1
typing_extensions==4.15.0

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 stdlib/logging/init.pyi et stdlib/time.pyi aux définitions référencées, puis reproduisez l’affectation avec mypy en utilisant l’exemple de l’issue. Vérifiez pourquoi les deux annotations de type appelable sont traitées comme incompatibles et mettez à jour le typage du stub concerné afin que l’exemple passe la vérification de types sans erreur d’affectation.

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é
2/5
Temps estimé
1-3 heures
Activité
À l'abandon
Clarté
Clairement spécifiée
Accessibilité débutants
50/100

Recevez les nouvelles issues par e-mail

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