Issue #18711: Add a new `PyErr_FormatV` function, similar to `PyErr_Format` but accepting a `va_list` argument.
This commit is contained in:
parent
63860e5407
commit
0676a406bf
|
@ -197,6 +197,14 @@ in various ways. There is a separate error indicator for each thread.
|
||||||
string.
|
string.
|
||||||
|
|
||||||
|
|
||||||
|
.. c:function:: PyObject* PyErr_FormatV(PyObject *exception, const char *format, va_list vargs)
|
||||||
|
|
||||||
|
Same as :c:func:`PyErr_Format`, but taking a `va_list` argument rather
|
||||||
|
than a variable number of arguments.
|
||||||
|
|
||||||
|
.. versionadded:: 3.5
|
||||||
|
|
||||||
|
|
||||||
.. c:function:: void PyErr_SetNone(PyObject *type)
|
.. c:function:: void PyErr_SetNone(PyObject *type)
|
||||||
|
|
||||||
This is a shorthand for ``PyErr_SetObject(type, Py_None)``.
|
This is a shorthand for ``PyErr_SetObject(type, Py_None)``.
|
||||||
|
|
|
@ -349,6 +349,11 @@ PyErr_Format:PyObject*:exception:+1:
|
||||||
PyErr_Format:const char*:format::
|
PyErr_Format:const char*:format::
|
||||||
PyErr_Format::...::
|
PyErr_Format::...::
|
||||||
|
|
||||||
|
PyErr_FormatV:PyObject*::null:
|
||||||
|
PyErr_FormatV:PyObject*:exception:+1:
|
||||||
|
PyErr_FormatV:const char*:format::
|
||||||
|
PyErr_FormatV:va_list:vargs::
|
||||||
|
|
||||||
PyErr_WarnEx:int:::
|
PyErr_WarnEx:int:::
|
||||||
PyErr_WarnEx:PyObject*:category:0:
|
PyErr_WarnEx:PyObject*:category:0:
|
||||||
PyErr_WarnEx:const char*:message::
|
PyErr_WarnEx:const char*:message::
|
||||||
|
|
|
@ -242,6 +242,12 @@ PyAPI_FUNC(PyObject *) PyErr_Format(
|
||||||
const char *format, /* ASCII-encoded string */
|
const char *format, /* ASCII-encoded string */
|
||||||
...
|
...
|
||||||
);
|
);
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
|
||||||
|
PyAPI_FUNC(PyObject *) PyErr_FormatV(
|
||||||
|
PyObject *exception,
|
||||||
|
const char *format,
|
||||||
|
va_list vargs);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef MS_WINDOWS
|
#ifdef MS_WINDOWS
|
||||||
PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithFilename(
|
PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithFilename(
|
||||||
|
|
|
@ -10,6 +10,9 @@ Release date: TBA
|
||||||
Core and Builtins
|
Core and Builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- Issue #18711: Add a new `PyErr_FormatV` function, similar to `PyErr_Format`
|
||||||
|
but accepting a `va_list` argument.
|
||||||
|
|
||||||
- Issue #22520: Fix overflow checking when generating the repr of a unicode
|
- Issue #22520: Fix overflow checking when generating the repr of a unicode
|
||||||
object.
|
object.
|
||||||
|
|
||||||
|
|
|
@ -120,6 +120,7 @@ EXPORTS
|
||||||
PyErr_ExceptionMatches=python35.PyErr_ExceptionMatches
|
PyErr_ExceptionMatches=python35.PyErr_ExceptionMatches
|
||||||
PyErr_Fetch=python35.PyErr_Fetch
|
PyErr_Fetch=python35.PyErr_Fetch
|
||||||
PyErr_Format=python35.PyErr_Format
|
PyErr_Format=python35.PyErr_Format
|
||||||
|
PyErr_FormatV=python35.PyErr_FormatV
|
||||||
PyErr_GivenExceptionMatches=python35.PyErr_GivenExceptionMatches
|
PyErr_GivenExceptionMatches=python35.PyErr_GivenExceptionMatches
|
||||||
PyErr_NewException=python35.PyErr_NewException
|
PyErr_NewException=python35.PyErr_NewException
|
||||||
PyErr_NewExceptionWithDoc=python35.PyErr_NewExceptionWithDoc
|
PyErr_NewExceptionWithDoc=python35.PyErr_NewExceptionWithDoc
|
||||||
|
|
|
@ -119,6 +119,7 @@ PyErr_Display
|
||||||
PyErr_ExceptionMatches
|
PyErr_ExceptionMatches
|
||||||
PyErr_Fetch
|
PyErr_Fetch
|
||||||
PyErr_Format
|
PyErr_Format
|
||||||
|
PyErr_FormatV
|
||||||
PyErr_GivenExceptionMatches
|
PyErr_GivenExceptionMatches
|
||||||
PyErr_NewException
|
PyErr_NewException
|
||||||
PyErr_NewExceptionWithDoc
|
PyErr_NewExceptionWithDoc
|
||||||
|
|
|
@ -749,19 +749,11 @@ PyErr_BadInternalCall(void)
|
||||||
#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
|
#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
PyErr_Format(PyObject *exception, const char *format, ...)
|
PyErr_FormatV(PyObject *exception, const char *format, va_list vargs)
|
||||||
{
|
{
|
||||||
va_list vargs;
|
|
||||||
PyObject* string;
|
PyObject* string;
|
||||||
|
|
||||||
#ifdef HAVE_STDARG_PROTOTYPES
|
|
||||||
va_start(vargs, format);
|
|
||||||
#else
|
|
||||||
va_start(vargs);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef Py_DEBUG
|
#ifdef Py_DEBUG
|
||||||
/* in debug mode, PyEval_EvalFrameEx() fails with an assertion error
|
/* in debug mode, PyEval_EvalFrameEx() fails with an assertion error
|
||||||
if an exception is set when it is called */
|
if an exception is set when it is called */
|
||||||
|
@ -771,11 +763,24 @@ PyErr_Format(PyObject *exception, const char *format, ...)
|
||||||
string = PyUnicode_FromFormatV(format, vargs);
|
string = PyUnicode_FromFormatV(format, vargs);
|
||||||
PyErr_SetObject(exception, string);
|
PyErr_SetObject(exception, string);
|
||||||
Py_XDECREF(string);
|
Py_XDECREF(string);
|
||||||
va_end(vargs);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PyObject *
|
||||||
|
PyErr_Format(PyObject *exception, const char *format, ...)
|
||||||
|
{
|
||||||
|
va_list vargs;
|
||||||
|
#ifdef HAVE_STDARG_PROTOTYPES
|
||||||
|
va_start(vargs, format);
|
||||||
|
#else
|
||||||
|
va_start(vargs);
|
||||||
|
#endif
|
||||||
|
PyErr_FormatV(exception, format, vargs);
|
||||||
|
va_end(vargs);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
PyErr_NewException(const char *name, PyObject *base, PyObject *dict)
|
PyErr_NewException(const char *name, PyObject *base, PyObject *dict)
|
||||||
|
|
Loading…
Reference in New Issue