python / python/typing_extensions
TypeError when omitting a Protocol type argument with default
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 583
- Forks
- 146
- Merge moyen
- 10 h 11 min
- PR mergées (30 j)
- 5
Description
This is very similar to https://github.com/python/cpython/issues/137191, but with a slightly different error message:
from typing_extensions import Generic, Protocol, TypeVar
T1 = TypeVar("T1")
T2 = TypeVar("T2", default=object)
class A(Protocol[T1]): ...
class B1(A[T2], Protocol, Generic[T1, T2]): ... # the workaround
class B2(A[T2], Protocol[T1, T2]): ... # the problem
B1[str] # ok
B2[str] # TypeError
on 3.12.11:
Traceback (most recent call last):
File "/home/joren/huh.py", line 11, in <module>
B2[str] # TypeError
~~^^^^^
File "/home/joren/.pyenv/versions/3.12.11/lib/python3.12/typing.py", line 398, in inner
return func(*args, **kwds)
^^^^^^^^^^^^^^^^^^^
File "/home/joren/.pyenv/versions/3.12.11/lib/python3.12/typing.py", line 1110, in _generic_class_getitem
_check_generic(cls, params, len(cls.__parameters__))
File "/home/joren/.pyenv/versions/3.12.11/lib/python3.12/site-packages/typing_extensions.py", line 3085, in _check_generic
raise TypeError(f"Too {'many' if alen > elen else 'few'} arguments"
TypeError: Too few arguments for <class '__main__.B2'>; actual 1, expected at least 1
on 3.9.23:
Traceback (most recent call last):
File "/home/joren/huh.py", line 11, in <module>
B2[str] # TypeError
File "/home/joren/.pyenv/versions/3.9.23/lib/python3.9/typing.py", line 277, in inner
return func(*args, **kwds)
File "/home/joren/.pyenv/versions/3.9.23/lib/python3.9/typing.py", line 1004, in __class_getitem__
_check_generic(cls, params, len(cls.__parameters__))
File "/home/joren/.pyenv/versions/3.9.23/lib/python3.9/site-packages/typing_extensions.py", line 3049, in _check_generic
raise TypeError(f"Too {'many' if alen > elen else 'few'} {things}"
TypeError: Too few parameters for <class '__main__.B2'>; actual 1, expected at least 1
And since typing_extensions occurs in the traceback, I figured that this is not the same issue as https://github.com/python/cpython/issues/137191.
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
Reproduisez l’exemple avec les versions de Python prises en charge, puis examinez dans typing_extensions.py la zone autour de _check_generic, qui apparaît dans la traceback. Comparez B2[str] avec le contournement fonctionnel B1[str] ; le travail est considéré comme terminé lorsque le TypeError signalé est résolu sans régression de la validation des arguments génériques.
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é
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- À l'abandon
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 45/100