`generics_defaults.py` mandates that type checkers should allow a class that raises `TypeError` at runtime
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 1.8k
- Forks
- 302
- Avg merge
- 23h
- Merged PRs (30d)
- 8
Description
This test mandates that type checkers should allow classes that have ParamSpecs-with-defaults following TypeVarTuples: https://github.com/python/typing/blob/22d9392a5ead302cc02c47ecbbcf3aa40106fd9f/conformance/tests/generics_defaults.py#L191-L200
But these fail at runtime. Using Python 3.11 syntax:
% uvx python3.14
Python 3.14.0 (main, Oct 10 2025, 12:54:13) [Clang 20.1.4 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from typing import *
>>> Ts = TypeVarTuple("Ts")
>>> P = ParamSpec("P", default=[int, str])
>>> class A(Generic[*Ts, P]): ...
...
Traceback (most recent call last):
File "<python-input-3>", line 1, in <module>
class A(Generic[*Ts, P]): ...
~~~~~~~^^^^^^^^
File "/Users/alexw/Library/Application Support/uv/python/cpython-3.14.0-macos-aarch64-none/lib/python3.14/typing.py", line 402, in inner
return func(*args, **kwds)
File "/Users/alexw/Library/Application Support/uv/python/cpython-3.14.0-macos-aarch64-none/lib/python3.14/typing.py", line 1157, in _generic_class_getitem
return _GenericAlias(cls, args)
File "/Users/alexw/Library/Application Support/uv/python/cpython-3.14.0-macos-aarch64-none/lib/python3.14/typing.py", line 1334, in __init__
self.__parameters__ = _collect_type_parameters(
~~~~~~~~~~~~~~~~~~~~~~~~^
args,
^^^^^
enforce_default_ordering=enforce_default_ordering,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/Users/alexw/Library/Application Support/uv/python/cpython-3.14.0-macos-aarch64-none/lib/python3.14/typing.py", line 291, in _collect_type_parameters
raise TypeError('Type parameter with a default'
' follows TypeVarTuple')
TypeError: Type parameter with a default follows TypeVarTuple
Using Python <=3.10 syntax:
>>> class B(Generic[Unpack[Ts], P]): ...
...
Traceback (most recent call last):
File "<python-input-4>", line 1, in <module>
class B(Generic[Unpack[Ts], P]): ...
~~~~~~~^^^^^^^^^^^^^^^
File "/Users/alexw/Library/Application Support/uv/python/cpython-3.14.0-macos-aarch64-none/lib/python3.14/typing.py", line 402, in inner
return func(*args, **kwds)
File "/Users/alexw/Library/Application Support/uv/python/cpython-3.14.0-macos-aarch64-none/lib/python3.14/typing.py", line 1157, in _generic_class_getitem
return _GenericAlias(cls, args)
File "/Users/alexw/Library/Application Support/uv/python/cpython-3.14.0-macos-aarch64-none/lib/python3.14/typing.py", line 1334, in __init__
self.__parameters__ = _collect_type_parameters(
~~~~~~~~~~~~~~~~~~~~~~~~^
args,
^^^^^
enforce_default_ordering=enforce_default_ordering,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/Users/alexw/Library/Application Support/uv/python/cpython-3.14.0-macos-aarch64-none/lib/python3.14/typing.py", line 291, in _collect_type_parameters
raise TypeError('Type parameter with a default'
' follows TypeVarTuple')
TypeError: Type parameter with a default follows TypeVarTuple
And using Python 3.13+ syntax:
>>> class C[*Ts, **P = [int, str]]: ...
...
Traceback (most recent call last):
File "<python-input-5>", line 1, in <module>
class C[*Ts, **P = [int, str]]: ...
File "<python-input-5>", line 1, in <generic parameters of C>
class C[*Ts, **P = [int, str]]: ...
File "/Users/alexw/Library/Application Support/uv/python/cpython-3.14.0-macos-aarch64-none/lib/python3.14/typing.py", line 1334, in __init__
self.__parameters__ = _collect_type_parameters(
~~~~~~~~~~~~~~~~~~~~~~~~^
args,
^^^^^
enforce_default_ordering=enforce_default_ordering,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/Users/alexw/Library/Application Support/uv/python/cpython-3.14.0-macos-aarch64-none/lib/python3.14/typing.py", line 291, in _collect_type_parameters
raise TypeError('Type parameter with a default'
' follows TypeVarTuple')
TypeError: Type parameter with a default follows TypeVarTuple
Since it seems that the tests are quoting the spec here, is this a bug in the runtime implementation of the typing module? Or should we update the spec and the conformance suite to allow type checkers to catch this runtime error?
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with conformance/tests/generics_defaults.py at lines 191-200 and compare its requirement with the typing specification. Then inspect typing.py in _collect_type_parameters and reproduce the examples across the cited Python syntax versions. Done means deciding whether the runtime or the specification and conformance test are inconsistent, with regression coverage for the chosen correction.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- documentation, testing
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100