When dealing with C extensions from Python there are circumstances
where a function is called and we get an OSError(errno) exception
without knowing what exactly went wrong internally. This is especially
not obvious on Windows, where multiple MSDN APIs may be invoked within
the same C function and we're not sure which one of them failed.

There are other times where the underlying C syscall is obvious, but
it would still be useful to append some additional information. One
example is socket.bind():
https://github.com/python/cpython/blob/56065d4c8ac03042cb7e29ffda9b1ac544a37b4d/Lib/asyncio/base_events.py#L940-L949

In order to work around that in psutil (on Windows) I stored the debug
msg string in OSError.filename attribute:
https://github.com/giampaolo/psutil/pull/1428/
As such I was thinking that perhaps it would be nice to provide 2 new
cPython APIs:

PyErr_SetFromErrnoWithMsg(PyObject *type, const char *msg)
PyErr_SetFromWindowsErrWithMsg(int ierr, const char *msg)
PyErr_SetExcFromWindowsErrWithMsg(PyObject *type, int ierr, const char *msg)

With this in place also OSError and WindowsError would probably have
to host a new "extramsg" attribute or something (but not necessarily).

Thoughts?

-- 
Giampaolo - http://grodola.blogspot.com
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to