Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork33.7k
Closed
Description
The issuegh-106572 changedPyObject_DelAttr() andPyObject_DelAttrString() implementation from a macro to a function (commit1f2921b).
Now I propose deprecating callsPyObject_SetAttr(obj, attr, NULL) andPyObject_SetAttrString(obj, attr, NULL)with an exception set to help detecting bugs. When the code creating the attribute value failed, it should be handled before callingPyObject_SetAttr[String)() toavoid deleting the attribute by mistake.
The change affects also the stable ABI.
I also propose to treat this deprecation as an error in Python 3.17.
Example of buggy code:
PyObject *module = PyUnicode_FromString(module_name);int res = PyObject_SetAttrString(ns, "__module__", module);Py_DECREF(module);Correct code:
PyObject *module = PyUnicode_FromString(module_name);if (module == NULL) { // <=== CHECK VALUE === goto error;}int res = PyObject_SetAttrString(ns, "__module__", module);Py_DECREF(module);