python / python/typing_extensions
TypeError: Parameter list cannot be empty for TypeVarTuple
Open
Nobody has claimed this yet.
pep-646
- Dominant language
- Python
- Stars
- 583
- Forks
- 146
- Avg merge
- 10h 11m
- Merged PRs (30d)
- 5
Description
There is a problem with typing_extensions that doesn't happen with typing. Running the program with python3.11 works, but with python3.10 with typing_extensions throws:
Traceback (most recent call last):
File ".../main.py", line 48, in <module>
main()
File ".../main.py", line 40, in main
signal: Signal[()] = Signal[()]()
File "/usr/lib/python3.10/typing.py", line 312, in inner
return func(*args, **kwds)
File "/usr/lib/python3.10/typing.py", line 1328, in __class_getitem__
raise TypeError(
TypeError: Parameter list to Signal[...] cannot be empty
from __future__ import annotations
from typing_extensions import Callable, TypeVarTuple, Generic, Unpack, List, TypeVar
VarArgs = TypeVarTuple('VarArgs')
class Signal(Generic[Unpack[VarArgs]]):
def __init__(self):
self.functions: List[Callable[..., None]] = []
"""
Simple mechanism that allows abstracted invocation of callbacks. Multiple callbacks can be attached to a signal
so that they are all called when the signal is emitted.
"""
def connect(self, function: Callable[..., None]):
"""
Add a callback to this Signal
:param function: callback to call when emited
"""
self.functions.append(function)
def emit(self, *args: Unpack[VarArgs]):
"""
Call all callbacks with the arguments passed
:param args: arguments for the signal, must be the same type as type parameter
"""
for function in self.functions:
if args:
function(*args)
else:
function()
def main():
def signalEmptyCall():
print("Hello!")
signal: Signal[()] = Signal[()]()
signal.connect(signalEmptyCall)
signal.emit()
if __name__ == '__main__':
main()
Contributor guide
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 the main.py reproduction and compare Signal[()] behavior under Python 3.10 with typing_extensions and Python 3.11 with typing. Trace the TypeVarTuple and empty-parameter handling, then add or update a regression test showing that the empty parameter list is accepted consistently.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- tooling
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100