[Python-Dev] capturing RETURN_VALUE (original) (raw)
Christian Tismer tismer at stackless.com
Sun Aug 8 19:04:35 CEST 2004
- Previous message: [Python-Dev] Re: Thoughts on validation, events, rules
- Next message: [Python-Dev] capturing RETURN_VALUE
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Dear list,
just by chance, I discovered a probably very unknown feature of the block stack machinery of Python's frames:
-- It is possible to abandon a return statement. --
My question: Is this an artifact, or can I rely on this feature to persist for a while (while while >= 1 year) ?
Example code: I have a code body which either computes and returns a value, or it raises an exception. Surrounding it, I have a while true loop, embracing a try..finally block. In case of an exception, it simply lets the exception pass. In case of a return value, it intercepts it and can do anything (in the example, it just decorates the value and returns).
def return_capture(n, do_raise=False): _have_value = False # outer while loop, just there to get cancelled while True: try: # function body, returning a value or raising if do_raise: raise ValueError, "was told to raise" # signal valid value _have_value = True retval = n*n return finally: if _have_value: break # here we end after a captured return, and can do postprocessing retval = ("here the captured return value", retval) return retval
Sample output:
return_capture(5) ('here the captured return value', 25) return_capture(5, True) Traceback (most recent call last): File "", line 1, in ? File "", line 8, in return_capture ValueError: was told to raise
Again the question: Artifact, or a reliable feature?
ciao - chris
-- Christian Tismer :^) <mailto:tismer at stackless.com> Mission Impossible 5oftware : Have a break! Take a ride on Python's Johannes-Niemeyer-Weg 9a : Starship http://starship.python.net/ 14109 Berlin : PGP key -> http://wwwkeys.pgp.net/ work +49 30 89 09 53 34 home +49 30 802 86 56 mobile +49 173 24 18 776 PGP 0x57F3BF04 9064 F4E1 D754 C2FF 1619 305B C09C 5A3B 57F3 BF04 whom do you want to sponsor today? http://www.stackless.com/
- Previous message: [Python-Dev] Re: Thoughts on validation, events, rules
- Next message: [Python-Dev] capturing RETURN_VALUE
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]