Inconsistency in handling None handlers in the Python and C implementations of pickle
還沒有人認領這個 Issue。
評估
研究方向
首先閱讀 pickle 和 copy 模組的 Python 與 C 實作,然後檢視相關的 pull request gh-103035 和 gh-109498。完成這項工作需要就 None 處理常式的行為達成共識,並確保受影響的各個實作之間採用一致的處理方式。
由索引模型根據 Issue 內容生成。
描述
In the Python implementation of pickle setting some handlers to None causes a fallback to other methods.
- Setting
Pickler.reducer_overrideto None has the same effect as not setting this attribute -- falling back to other methods. - Setting the
dispatch_tableto None leads to falling back to__reduce_ex__. - Setting the
__reduce_ex__attribute to None leads to falling back to__reduce__. - Setting the
__setstate__attribute to None leads to falling back to the default implementation of__setstate__(setting__dict__and slots).
In the C implementation all this leads to TypeError: 'NoneType' object is not callable.
The copy module follows the Python implementation of pickle, except that it fails for any false value of __reduce__, not just None.
In most other code setting a dunder method to None leads to a TypeError (either raise explicitly or just generic "'NoneType' object is not callable").
We should decide what behavior should be in the pickle and copy module. On one hand, the Python implementation was primary. On other hand, it was inconsistent between the pickle and copy modules and was already changed in the past, the C implementation of pickle is now used by most users, and it is more consistent with other code.
See also:
https://mail.python.org/archives/list/python-dev@python.org/thread/YGAK34DRWJFSIV2VZ4NC2J24XO37GCMM/
https://docs.python.org/3.10/reference/datamodel.html#id2
https://github.com/python/cpython/issues/70146
https://github.com/python/cpython/issues/55781
https://github.com/python/cpython/issues/60755
Linked PRs
- gh-103035
- gh-109498
- 主要語言
- Python
- 星號
- 77.2k
- 分支
- 36k
- 平均合併
- 1 天 9 小時
- 30 天內合併 PR
- 558
貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
python/cpython 的其他 Issue
-
docs pending
難度 2/5 1-3 小時 新手友好度 78/100
-
stdlib type-feature
難度 2/5 1-3 小時 新手友好度 78/100
-
stdlib type-feature
難度 2/5 1-3 小時 新手友好度 72/100
-
build type-bug
難度 2/5 1-3 小時 新手友好度 76/100
-
stdlib topic-email type-feature
難度 2/5 1-3 小時 新手友好度 70/100
相似的 Issue
-
難度 1/5 1 小時以內 新手友好度 90/100
-
bug
難度 2/5 1-3 小時 新手友好度 86/100
zostera/django-bootstrap4#894 ·
-
難度 2/5 1-3 小時 新手友好度 78/100
use-agent-os/agent-os#3276 ·
-
難度 2/5 1-3 小時 新手友好度 88/100
zephyrproject-rtos/zephyr#119726 ·
-
area/auth bug comp/agent P3 platform/discord type/security
難度 2/5 1-3 小時 新手友好度 88/100
NousResearch/hermes-agent#117848 ·