This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
标题: Ensure PyEval_GetGlobals() doesn't set an exception when returning NULL
类型: enhancement Stage: test needed
Components: Versions:
process
状态: open Resolution:
Dependencies: 后续:
分配给: ncoghlan 抄送列表: ncoghlan
优先级: normal 关键字:

ncoghlan2022-04-03 06:41 创建。最近一次由 admin2022-04-11 14:59 修改。

Messages (2)
msg416611 - (view) Author: Alyssa Coghlan (ncoghlan) * (Python committer) 日期: 2022-04-03 06:41
While working on the first PR for bpo-44800 I provoked an obscure failure in PyImport_ImportModule by making PyEval_GetGlobals set an exception when returning NULL (as PyEval_GetLocals has done since bpo-18408 was implemented for Python 3.4).

This ticket covers adding an embedding test case that:

* ensures PyEval_GetGlobals() returns NULL without an exception when no Python frame is active
* ensures PyEval_GetLocals() returns NULL and sets an exception when no Python frame is active
* ensures PyImport_ImportModule still works when no Python frame is active

There's an option to slightly change the behaviour of `PyEval_GetLocals()` to NOT set an exception in the "no Python frame" case, and instead only set the error when there is a Python frame, but something goes wrong when attempting to access the fast locals array (such as a memory allocation failure).
msg416612 - (view) Author: Alyssa Coghlan (ncoghlan) * (Python committer) 日期: 2022-04-03 06:48
Core dev forum thread for the C API question: https://discuss.python.org/t/subtle-c-api-discrepancy-pyeval-getlocals-vs-pyeval-getglobals-with-no-python-frame/14797
历史
日期 用户 动作 参数
2022-04-11 14:59:58admin修改github: 91360
2022-04-03 06:48:44ncoghlan修改消息: + msg416612
2022-04-03 06:41:46ncoghlan创建