What happens after return statement?

sismex01 at hebmex.com sismex01 at hebmex.com
Mon Oct 21 16:11:14 CEST 2002


> From: Andreas Jung [mailto:lists at andreas-jung.com]
>
> ... But there is one exception:
> look at the document for try...except...finally.
> 'finally' allows you to specify actions that are
> executed in case of an exception.
> 
> -aj
>

Or even if there was no exception:

def simple(n):
  # Try to return 2*n
  try:
    # But, if "n" is odd, raise exception.
    if n % 2: raise ValueError("Number is odd")
    return 2*n
  finally:
    print "Number:",2*n

This simple function produces this behaviour:

>>> simple(2)
Number: 4
4
>>> simple(4)
Number: 8
8
>>> simple(5)
Number: 10
Traceback (most recent call last):
  File "<pyshell#20>", line 1, in ?
    simple(5)
  File "<pyshell#14>", line 3, in simple
    if n % 2: raise ValueError("Number is odd")
ValueError: Number is odd
>>> simple(1)
Number: 2
Traceback (most recent call last):
  File "<pyshell#21>", line 1, in ?
    simple(1)
  File "<pyshell#14>", line 3, in simple
    if n % 2: raise ValueError("Number is odd")
ValueError: Number is odd
>>> 

So, what's in the "finally" clause get's executed before
exiting the function, even after a "return" statement;
this is kinda neat when playing with threaded functions,
because you can specify that you with to release a lock
inside the finally:

   mutex.acquire()
   try:
      # do some interesting stuff.
      return result
   finally:
      mutex.release()

In this case, the mutex gets released no matter if there
was or there wasn't an exception; this is really cool.

HTH

-gustavo




More information about the Python-list mailing list