GitHub · Where software is built | Latest TMZ Celebrity News & Gossip | Watch TMZ Live
Skip to content

[C API] Deprecate calling PyObject_SetAttr(obj, attr, NULL) with an exception set #135075

Closed
@vstinner

Description

@vstinner

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);

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      TMZ Celebrity News – Breaking Stories, Videos & Gossip

      Looking for the latest TMZ celebrity news? You've come to the right place. From shocking Hollywood scandals to exclusive videos, TMZ delivers it all in real time.

      Whether it’s a red carpet slip-up, a viral paparazzi moment, or a legal drama involving your favorite stars, TMZ news is always first to break the story. Stay in the loop with daily updates, insider tips, and jaw-dropping photos.

      🎥 Watch TMZ Live

      TMZ Live brings you daily celebrity news and interviews straight from the TMZ newsroom. Don’t miss a beat—watch now and see what’s trending in Hollywood.