Skip to content

Pickle ignores custom getstate methods on TextIOWrapper in Python 3.12 #122559

@SimonSorgQC

Description

@SimonSorgQC

Bug report

Bug description:

So I am not entirely sure whether this is unintended behaviour, but it is definitely a noticeable change between 3.11 and 3.12 that is rather unintuitive

import pickle from io import BytesIO, TextIOWrapper class EncodedFile(TextIOWrapper): def __getstate__(self): return "string" def __setstate__(self, state): pass file = EncodedFile(BytesIO(b"string")) pickle.dumps(file)

This works in Python 3.11 and 3.10, but fails in 3.12 with

pickle.dumps(file) TypeError: cannot pickle 'EncodedFile' instances

CPython versions tested on:

3.10, 3.11, 3.12

Operating systems tested on:

macOS

Linked PRs

Metadata

Metadata

Labels

topic-IOtype-bugAn unexpected behavior, bug, or error

Projects

Status

Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions