File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -307,6 +307,14 @@ \section{Object Protocol \label{object}}
307307 return false.
308308\end {cfuncdesc }
309309
310+ \begin {cfuncdesc }{PyObject*}{PyObject_GetIter}{PyObject *o}
311+ This is equivalent to the Python expression \samp {iter(\var {o})}.
312+ It returns a new iterator for the object argument, or the object
313+ itself if the object is already an iterator. Raises
314+ \exception {TypeError} and returns \NULL {} if the object cannot be
315+ iterated.
316+ \end {cfuncdesc }
317+
310318
311319\section {Number Protocol \label {number } }
312320
@@ -855,17 +863,24 @@ \section{Iterator Protocol \label{iterator}}
855863look something like this:
856864
857865\begin {verbatim }
858- PyObject *iterator = ... ;
866+ PyObject *iterator = PyObject_GetIter(obj) ;
859867PyObject *item;
860868
861- while (item = PyIter_Next(iter)) {
869+ if (iterator == NULL) {
870+ /* propagate error */
871+ }
872+
873+ while (item = PyIter_Next(iterator)) {
862874 /* do something with item */
863875 ...
864876 /* release reference when done */
865877 Py_DECREF(item);
866878}
879+
880+ Py_DECREF(iterator);
881+
867882if (PyErr_Occurred()) {
868- /* propogate error */
883+ /* propagate error */
869884}
870885else {
871886 /* continue doing useful work */
You can’t perform that action at this time.
0 commit comments