"Gabriel Genellina" <[EMAIL PROTECTED]> wrote:
> Not the *previous* exception, but the *current* one. You must be
> inside an "except" clause to use a bare raise.
>
No, you don't have to be inside an except clause to use a bare raise.
A bare 'raise' will re-raise the last exception that was active in the
current scope. That applies even outside the except clauses just so long
as there has been an exception within the same function:
e.g.
def retry(fn, *args):
for attempt in range(3):
try:
return fn(*args)
except:
print "retrying attempt", attempt+1
# If we get here we've had too many retries
raise
>>> import random
>>> def testfn():
if random.randint(0,3):
raise RuntimeError("oops")
return 42
>>> retry(testfn)
retrying attempt 1
retrying attempt 2
retrying attempt 3
Traceback (most recent call last):
File "<pyshell#24>", line 1, in <module>
retry(testfn)
File "<pyshell#20>", line 4, in retry
return fn(*args)
File "<pyshell#23>", line 3, in testfn
raise RuntimeError("oops")
RuntimeError: oops
>>> retry(testfn)
retrying attempt 1
retrying attempt 2
42
>>> retry(testfn)
42
--
http://mail.python.org/mailman/listinfo/python-list