On 1/11/2011 7:22 PM, eblume wrote:
This would be exactly equivalent to (but much more compact than):
while True:
try:
do_something()
except Exception:
break
Or perhaps:
try:
while True:
do_something()
except Exception:
pass
Now, why would anyone want this structure? In my case, I'm using it
(well, the latter form of it, obviously) to loop over an iterator
object that was not created via the 'for obj in collection:' syntax.
Here's the actual code snippet:
headers = self.reader.next()
... intermediate code ....
while True:
try:
line = self.reader.next()
except StopIteration:
return data
data.append(line)
I'm sure I'm doing this in a very backward and wrong way, and would
appreciate tips on a better way to accomplish the same task. Obviously
there is an existing syntax which handles the same situations, and I
don't suspect that this will be an embraced proposal, I'm more hoping
to spark some conversation.
reader_iter = iter(self.reader)
headers = reader_iter.next()
# intermediate code
for line in reader_iter:
data.append(line)
return data
Also note that recommended best practice is to wrap the "headers =
reader_iter.next()" line in a try-except in case it raises a
StopIteration. Otherwise it could get propagated silently up to some
unrelated for loop higher in the stack, resulting in unexpected behavior.
Cheers,
Ian
--
http://mail.python.org/mailman/listinfo/python-list