[Python-Dev] Change to PyIter_Next()?
Tim Peters
tim.one@home.com
Fri, 4 May 2001 17:18:16 -0400
[Tim]
>> In spare moments, I've been plugging away at ... iterators
[Guido]
> For which efforts I extend my greatest thanks!
Yet but a pale reflection of the thanks I extend to you for implementing
these guys to begin with: they're *loads* of fun! But not nearly as much
fun as playing with Perl, so they're still prudently Pythonic <wink>.
[T proposed adding a int* error arg to PyIter_Next()]
[G]
> How about making PyIter_Next() call PyErr_Clear() when the exception
> is StopIteration?
>
> Then calls could be
>
> op2 = PyIter_Next(it);
> if (op2 == NULL) {
> if (PyErr_Occurred())
> goto Fail;
> break;
> }
Perfect. I'll do that later tonight, and update the PEP to match.
> This is a tad slower and arguably generates more code (assuming an
> extra call is slower than passing an extra argument and loading it)
> but doesn't require declaring the error variable.
Well, it's two more calls (since PyErr_Occurred() also makes a call to get
the thread state), but I don't really care because the client only does this
in case of error or end-of-iteration (which aren't the normal cases). I was
dreading finding a spare int var to pass inside FOR_ITER anyway <wink>.