bpo-46328: Add sys.exception() (GH-30514)

This commit is contained in:
Irit Katriel 2022-01-13 12:35:58 +00:00 committed by GitHub
parent 9c2ebb906d
commit c590b581bb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 147 additions and 19 deletions

View file

@ -76,6 +76,28 @@ exit:
return return_value;
}
PyDoc_STRVAR(sys_exception__doc__,
"exception($module, /)\n"
"--\n"
"\n"
"Return the current exception.\n"
"\n"
"Return the most recent exception caught by an except clause\n"
"in the current stack frame or in an older stack frame, or None\n"
"if no such exception exists.");
#define SYS_EXCEPTION_METHODDEF \
{"exception", (PyCFunction)sys_exception, METH_NOARGS, sys_exception__doc__},
static PyObject *
sys_exception_impl(PyObject *module);
static PyObject *
sys_exception(PyObject *module, PyObject *Py_UNUSED(ignored))
{
return sys_exception_impl(module);
}
PyDoc_STRVAR(sys_exc_info__doc__,
"exc_info($module, /)\n"
"--\n"
@ -992,4 +1014,4 @@ sys_getandroidapilevel(PyObject *module, PyObject *Py_UNUSED(ignored))
#ifndef SYS_GETANDROIDAPILEVEL_METHODDEF
#define SYS_GETANDROIDAPILEVEL_METHODDEF
#endif /* !defined(SYS_GETANDROIDAPILEVEL_METHODDEF) */
/*[clinic end generated code: output=855fc93b2347710b input=a9049054013a1b77]*/
/*[clinic end generated code: output=60756bc6f683e0c8 input=a9049054013a1b77]*/

View file

@ -771,6 +771,28 @@ sys_excepthook_impl(PyObject *module, PyObject *exctype, PyObject *value,
}
/*[clinic input]
sys.exception
Return the current exception.
Return the most recent exception caught by an except clause
in the current stack frame or in an older stack frame, or None
if no such exception exists.
[clinic start generated code]*/
static PyObject *
sys_exception_impl(PyObject *module)
/*[clinic end generated code: output=2381ee2f25953e40 input=c88fbb94b6287431]*/
{
_PyErr_StackItem *err_info = _PyErr_GetTopmostException(_PyThreadState_GET());
if (err_info->exc_value != NULL) {
return Py_NewRef(err_info->exc_value);
}
Py_RETURN_NONE;
}
/*[clinic input]
sys.exc_info
@ -1963,6 +1985,7 @@ static PyMethodDef sys_methods[] = {
SYS__CURRENT_FRAMES_METHODDEF
SYS__CURRENT_EXCEPTIONS_METHODDEF
SYS_DISPLAYHOOK_METHODDEF
SYS_EXCEPTION_METHODDEF
SYS_EXC_INFO_METHODDEF
SYS_EXCEPTHOOK_METHODDEF
SYS_EXIT_METHODDEF
@ -2457,7 +2480,8 @@ Functions:\n\
\n\
displayhook() -- print an object to the screen, and save it in builtins._\n\
excepthook() -- print an exception and its traceback to sys.stderr\n\
exc_info() -- return thread-safe information about the current exception\n\
exception() -- return the current thread's active exception\n\
exc_info() -- return information about the current thread's active exception\n\
exit() -- exit the interpreter by raising SystemExit\n\
getdlopenflags() -- returns flags to be used for dlopen() calls\n\
getprofile() -- get the global profiling function\n\