💡
原文中文,约9200字,阅读约需22分钟。
📝
内容提要
这篇文章讨论了Python 3.13 Beta版本中的一个Bug,导致低版本编译的扩展无法在Python 3.13中运行。问题出在处理PyExc_TypeError对象时,引用计数发生了变化,导致断言失败。文章提到了两种修复方式,但问题的根源是在PEP 683实现时状态混淆。
🎯
关键要点
- Python 3.13 Beta版本中存在一个Bug,导致低版本编译的扩展无法运行。
- Bug编号为GH-121528,源于PEP 683的实现及相关改动。
- 问题出现在处理PyExc_TypeError对象时,引用计数发生变化,导致断言失败。
- 社区发现,基于Limited API编译的扩展在Python 3.13中加载时出现问题。
- 在处理PyExc_TypeError时,_PyObject_Init函数中的逻辑判断导致了assert失败。
- GH-1161152引入的变更导致了对象的引用计数逻辑发生变化。
- Py_INCREF宏在3.13和3.11中的实现不同,影响了immortal对象的引用计数。
- 修复方案包括将assert部分恢复到之前的if条件检查,或扩大immortal对象的检查范围。
- 根本问题在于PEP 683实现时状态混淆,可能导致后续出现更多问题。
➡️