You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The issue gh-106572 changed PyObject_DelAttr() and PyObject_DelAttrString() implementation from a macro to a function (commit 1f2921b).
Now I propose deprecating calls PyObject_SetAttr(obj, attr, NULL) and PyObject_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 calling PyObject_SetAttr[String)() to avoid 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);
It seems like currently, it's not really possible to call PyObject_SetAttr() with NULL and an exception set. For example, if type->tp_setattro is PyObject_GenericSetAttr(), it fails with an assertion error:
Maybe we should directly treat this case (calling PyObject_SetAttr() with NULL value and an exception set) as an error, rather than trying to emit a DeprecationWarning.
Uh oh!
There was an error while loading. Please reload this page.
The issue gh-106572 changed
PyObject_DelAttr()
andPyObject_DelAttrString()
implementation from a macro to a function (commit 1f2921b).Now I propose deprecating calls
PyObject_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)()
to avoid 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:
Correct code:
Linked PRs
The text was updated successfully, but these errors were encountered: