UnboundLocalError with extra code after return
Rich Healey
healey.rich at gmail.com
Wed Sep 30 00:15:54 EDT 2009
I'm trying to write a decorator that causes a function to do nothing
if called more than once- the reason for this is trivial and to see if
I can (Read- I'm enjoying the challenge, please don't ruin it for me
=] )
However I'm getting strange results with Python 2.6.2 on win32.
With this code:
def callonce(func):
def nullmethod(): pass
def __():
return func()
return __
@callonce
def t2():
print "T2 called"
t2()
It does exactly what you'd expect, prints "T2 called"
However:
def callonce(func):
def nullmethod(): pass
def __():
return func()
func = nullmethod
return ret
return __
@callonce
def t2():
print "T2 called"
t2()
Gives me:
C:\tmp\callonce>callonce.py
Traceback (most recent call last):
File "C:\tmp\callonce\callonce.py", line 27, in <module>
t2()
File "C:\tmp\callonce\callonce.py", line 12, in __
return func()
UnboundLocalError: local variable 'func' referenced before assignment
Any ideas on why? This looks like a bug to me, but I'm quite new to
this style of programming so it may be some nuance I'm not aware of.
Thanks in advance.
Rich Healey
More information about the Python-list
mailing list