Unverified Kaydet (Commit) 3fcc1e08 authored tarafından Serhiy Storchaka's avatar Serhiy Storchaka Kaydeden (comit) GitHub

bpo-35461: Document C API functions which suppress exceptions. (GH-11119)

üst 62a68b76
...@@ -429,7 +429,7 @@ Buffer-related functions ...@@ -429,7 +429,7 @@ Buffer-related functions
Return ``1`` if *obj* supports the buffer interface otherwise ``0``. When ``1`` is Return ``1`` if *obj* supports the buffer interface otherwise ``0``. When ``1`` is
returned, it doesn't guarantee that :c:func:`PyObject_GetBuffer` will returned, it doesn't guarantee that :c:func:`PyObject_GetBuffer` will
succeed. succeed. This function always succeeds.
.. c:function:: int PyObject_GetBuffer(PyObject *exporter, Py_buffer *view, int flags) .. c:function:: int PyObject_GetBuffer(PyObject *exporter, Py_buffer *view, int flags)
...@@ -470,7 +470,7 @@ Buffer-related functions ...@@ -470,7 +470,7 @@ Buffer-related functions
Return ``1`` if the memory defined by the *view* is C-style (*order* is Return ``1`` if the memory defined by the *view* is C-style (*order* is
``'C'``) or Fortran-style (*order* is ``'F'``) :term:`contiguous` or either one ``'C'``) or Fortran-style (*order* is ``'F'``) :term:`contiguous` or either one
(*order* is ``'A'``). Return ``0`` otherwise. (*order* is ``'A'``). Return ``0`` otherwise. This function always succeeds.
.. c:function:: int PyBuffer_ToContiguous(void *buf, Py_buffer *src, Py_ssize_t len, char order) .. c:function:: int PyBuffer_ToContiguous(void *buf, Py_buffer *src, Py_ssize_t len, char order)
......
...@@ -13,7 +13,7 @@ Codec registry and support functions ...@@ -13,7 +13,7 @@ Codec registry and support functions
.. c:function:: int PyCodec_KnownEncoding(const char *encoding) .. c:function:: int PyCodec_KnownEncoding(const char *encoding)
Return ``1`` or ``0`` depending on whether there is a registered codec for Return ``1`` or ``0`` depending on whether there is a registered codec for
the given *encoding*. the given *encoding*. This function always succeeds.
.. c:function:: PyObject* PyCodec_Encode(PyObject *object, const char *encoding, const char *errors) .. c:function:: PyObject* PyCodec_Encode(PyObject *object, const char *encoding, const char *errors)
......
...@@ -95,6 +95,10 @@ Dictionary Objects ...@@ -95,6 +95,10 @@ Dictionary Objects
Return the object from dictionary *p* which has a key *key*. Return *NULL* Return the object from dictionary *p* which has a key *key*. Return *NULL*
if the key *key* is not present, but *without* setting an exception. if the key *key* is not present, but *without* setting an exception.
Note that exceptions which occur while calling :meth:`__hash__` and
:meth:`__eq__` methods will get suppressed.
To get error reporting use :c:func:`PyDict_GetItemWithError()` instead.
.. c:function:: PyObject* PyDict_GetItemWithError(PyObject *p, PyObject *key) .. c:function:: PyObject* PyDict_GetItemWithError(PyObject *p, PyObject *key)
...@@ -109,6 +113,11 @@ Dictionary Objects ...@@ -109,6 +113,11 @@ Dictionary Objects
This is the same as :c:func:`PyDict_GetItem`, but *key* is specified as a This is the same as :c:func:`PyDict_GetItem`, but *key* is specified as a
:c:type:`const char\*`, rather than a :c:type:`PyObject\*`. :c:type:`const char\*`, rather than a :c:type:`PyObject\*`.
Note that exceptions which occur while calling :meth:`__hash__` and
:meth:`__eq__` methods and creating a temporary string object
will get suppressed.
To get error reporting use :c:func:`PyDict_GetItemWithError()` instead.
.. c:function:: PyObject* PyDict_SetDefault(PyObject *p, PyObject *key, PyObject *default) .. c:function:: PyObject* PyDict_SetDefault(PyObject *p, PyObject *key, PyObject *default)
......
...@@ -60,6 +60,10 @@ See also :c:func:`PyObject_GetItem`, :c:func:`PyObject_SetItem` and ...@@ -60,6 +60,10 @@ See also :c:func:`PyObject_GetItem`, :c:func:`PyObject_SetItem` and
This is equivalent to the Python expression ``key in o``. This is equivalent to the Python expression ``key in o``.
This function always succeeds. This function always succeeds.
Note that exceptions which occur while calling the :meth:`__getitem__`
method will get suppressed.
To get error reporting use :c:func:`PyObject_GetItem()` instead.
.. c:function:: int PyMapping_HasKeyString(PyObject *o, const char *key) .. c:function:: int PyMapping_HasKeyString(PyObject *o, const char *key)
...@@ -67,6 +71,10 @@ See also :c:func:`PyObject_GetItem`, :c:func:`PyObject_SetItem` and ...@@ -67,6 +71,10 @@ See also :c:func:`PyObject_GetItem`, :c:func:`PyObject_SetItem` and
This is equivalent to the Python expression ``key in o``. This is equivalent to the Python expression ``key in o``.
This function always succeeds. This function always succeeds.
Note that exceptions which occur while calling the :meth:`__getitem__`
method and creating a temporary string object will get suppressed.
To get error reporting use :c:func:`PyMapping_GetItemString()` instead.
.. c:function:: PyObject* PyMapping_Keys(PyObject *o) .. c:function:: PyObject* PyMapping_Keys(PyObject *o)
......
...@@ -280,3 +280,4 @@ Number Protocol ...@@ -280,3 +280,4 @@ Number Protocol
Returns ``1`` if *o* is an index integer (has the nb_index slot of the Returns ``1`` if *o* is an index integer (has the nb_index slot of the
tp_as_number structure filled in), and ``0`` otherwise. tp_as_number structure filled in), and ``0`` otherwise.
This function always succeeds.
...@@ -39,7 +39,11 @@ an object, and :c:func:`PyBuffer_Release` when the buffer view can be released. ...@@ -39,7 +39,11 @@ an object, and :c:func:`PyBuffer_Release` when the buffer view can be released.
.. c:function:: int PyObject_CheckReadBuffer(PyObject *o) .. c:function:: int PyObject_CheckReadBuffer(PyObject *o)
Returns ``1`` if *o* supports the single-segment readable buffer interface. Returns ``1`` if *o* supports the single-segment readable buffer interface.
Otherwise returns ``0``. Otherwise returns ``0``. This function always succeeds.
Note that this function tries to get and release a buffer, and exceptions
which occur while calling correspoding functions will get suppressed.
To get error reporting use :c:func:`PyObject_GetBuffer()` instead.
.. c:function:: int PyObject_AsWriteBuffer(PyObject *obj, void **buffer, Py_ssize_t *buffer_len) .. c:function:: int PyObject_AsWriteBuffer(PyObject *obj, void **buffer, Py_ssize_t *buffer_len)
......
...@@ -33,6 +33,10 @@ Object Protocol ...@@ -33,6 +33,10 @@ Object Protocol
is equivalent to the Python expression ``hasattr(o, attr_name)``. This function is equivalent to the Python expression ``hasattr(o, attr_name)``. This function
always succeeds. always succeeds.
Note that exceptions which occur while calling :meth:`__getattr__` and
:meth:`__getattribute__` methods will get suppressed.
To get error reporting use :c:func:`PyObject_GetAttr()` instead.
.. c:function:: int PyObject_HasAttrString(PyObject *o, const char *attr_name) .. c:function:: int PyObject_HasAttrString(PyObject *o, const char *attr_name)
...@@ -40,6 +44,11 @@ Object Protocol ...@@ -40,6 +44,11 @@ Object Protocol
is equivalent to the Python expression ``hasattr(o, attr_name)``. This function is equivalent to the Python expression ``hasattr(o, attr_name)``. This function
always succeeds. always succeeds.
Note that exceptions which occur while calling :meth:`__getattr__` and
:meth:`__getattribute__` methods and creating a temporary string object
will get suppressed.
To get error reporting use :c:func:`PyObject_GetAttrString()` instead.
.. c:function:: PyObject* PyObject_GetAttr(PyObject *o, PyObject *attr_name) .. c:function:: PyObject* PyObject_GetAttr(PyObject *o, PyObject *attr_name)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment