[C API] Enhance PyErr_WriteUnraisable() API to pass an error message · Issue #108082 · python/cpython (original) (raw)

Has this already been discussed elsewhere?

This is a minor feature, which does not need previous discussion elsewhere

No response

Proposal:

I added a private _PyErr_WriteUnraisableMsg() API but it cannot be used in third party code, nor in stdlib extensions which try to avoid private/internal functions (like sqlite3). Moreover, _PyErr_WriteUnraisableMsg() API doesn't allow to fully customize the error message.

The limitation of _PyErr_WriteUnraisableMsg() affected PR #106674 which has to add ; consider using ... in the error message which is not great.

    _PyErr_WriteUnraisableMsg(
        "in PyMapping_HasKeyString(); consider using "
        "PyMapping_GetOptionalItemString() or PyMapping_GetItemString()",
        NULL);

@serhiy-storchaka suggested to add an API which allows string formatting, similar to PyErr_Format().

_PyErr_WriteUnraisableMsg() was added in issue #81010.


By the way, we should go through all calls to PyErr_WriteUnraisable() and add more context to more these logs easier to get for developers: give more context about what the issue is, how to fix it, where it occurred, etc.

Linked PRs