GeezerVison is showing github.com — pickling fails for typing.Tuple[()] · Issue #94245 · python/cpython
pickling fails for typing.Tuple[()] #94245Description
Bug report
A clear and concise description of what the bug is.
Include a minimal, reproducible example (https://stackoverflow.com/help/minimal-reproducible-example), if possible.
import pickle
from typing import Tuple
j = Tuple[()]
serialized = pickle.dumps(j)
loaded = pickle.loads(serialized)
Error message:
Traceback (most recent call last):
File "/Users/ryanthompson/PycharmProjects/learningProjects/dill_regression/regression_test.py", line 6, in <module>
loaded = dill.loads(serialized)
File "/Users/ryanthompson/.pyenv/versions/3.8.11/lib/python3.8/site-packages/dill/_dill.py", line 387, in loads
return load(file, ignore, **kwds)
File "/Users/ryanthompson/.pyenv/versions/3.8.11/lib/python3.8/site-packages/dill/_dill.py", line 373, in load
return Unpickler(file, ignore=ignore, **kwds).load()
File "/Users/ryanthompson/.pyenv/versions/3.8.11/lib/python3.8/site-packages/dill/_dill.py", line 646, in load
obj = StockUnpickler.load(self)
File "/Users/ryanthompson/.pyenv/versions/3.8.11/lib/python3.8/typing.py", line 804, in __getitem__
return self.__getitem_inner__(params)
File "/Users/ryanthompson/.pyenv/versions/3.8.11/lib/python3.8/typing.py", line 261, in inner
return func(*args, **kwds)
File "/Users/ryanthompson/.pyenv/versions/3.8.11/lib/python3.8/typing.py", line 830, in __getitem_inner__
params = tuple(_type_check(p, msg) for p in params)
File "/Users/ryanthompson/.pyenv/versions/3.8.11/lib/python3.8/typing.py", line 830, in <genexpr>
params = tuple(_type_check(p, msg) for p in params)
File "/Users/ryanthompson/.pyenv/versions/3.8.11/lib/python3.8/typing.py", line 149, in _type_check
raise TypeError(f"{msg} Got {arg!r:.100}.")
TypeError: Tuple[t0, t1, ...]: each t must be a type. Got ().
Your environment
python 3.8
- CPython versions tested on:
3.6 & 3.8
- Operating system and architecture:
Mac OS
ActivityJelleZijlstra commented on Jun 24, 2022 Thanks for the report. I can reproduce on 3.9 and 3.10, but not a recent build of 3.11. I assume @serhiy-storchaka's changes to the representation of empty tuples fixed this issue.
We're not going to fix this for 3.9 and lower because those branches are in security fix-only mode, but we can still fix it on 3.10. mmckerns commented on Jun 24, 2022 Just for completeness... here's a little more information on the bug (from the OP issue at dill):
>>> import pickle
>>> import typing
>>> t = typing.Tuple[()]
>>> t
typing.Tuple[()]
>>> t = t.copy_with(())
>>> t
typing.Tuple[]
>>> s = pickle.dumps(t)
>>> pickle.loads(s)
typing.Tuple[()]
>>> typing.Tuple[]
File "<stdin>", line 1
typing.Tuple[]
^
SyntaxError: invalid syntax
serhiy-storchaka commented on Jun 25, 2022 Backporting #31836 can fix this issue. #94260 is an alternate fix. #94259 contains tests, they should be added in all versions.
MetadataMetadataStatusShow more project fields
DevelopmentNo branches or pull requestsIssue actions
|