Closed
Description
Repro:
» ./python.exe Python 3.12.0a1+ (heads/cover-pysequence-slice-dirty:04cb2ecd5d, Nov 5 2022, 16:01:29) [Clang 11.0.0 (clang-1100.0.33.16)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import pickle, statistics >>> n = statistics.NormalDist(37.5, 5.625) >>> pickle.dumps(n, protocol=0) # or `1` Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/sobolev/Desktop/cpython/Lib/copyreg.py", line 94, in _reduce_ex raise TypeError("a class that defines __slots__ without " TypeError: a class that defines __slots__ without defining __getstate__ cannot be pickled
This is actually tested in test_statistics
like this:
cpython/Lib/test/test_statistics.py
Lines 3012 to 3013 in 8feb7ab
But, it is only testing default protocol and is missing for proto in range(pickle.HIGHEST_PROTOCOL + 1):
part. Note: this is the only place in all of the CPython tests, where protocol=
is not passed. All other places do have the full check.
It looks like a bug to me and I will send a PR with the fix.
CC @rhettinger