By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
439,957 Members | 1,969 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 439,957 IT Pros & Developers. It's quick & easy.

scopes of local and global variable

P: n/a
#############################CODE################# #############
t_len=0
class WORK:
def getwork(self):
def formattable(table_to_process,type):
TYPE=["p","t","T","s","i"] #list of types to format
if type==TYPE[1]:
def format_t():
row=[]
for col in table_to_process:

#######################
# ERROR PRONE PART #
#######################
if len(str(col))>t_len:
t_len=len(str(col))
#######################
# Error message says: #
# UnboundLocalError: local variable 't_len' referenced before assignment#

row+=col
if (table_to_process.index(col)+1)%7==0:
t_temp.append(row)
row=[]
format_t()
################################################## ###############

Interpreter says that t_len is local variable although i have
specified t_len=0 in line 1. Also, although i've stated t_len=0 in
line 1, it says that t_len is referenced before assignment.
Dec 22 '06 #1
Share this Question
Share on Google+
9 Replies


P: n/a
Pyenos wrote:
#############################CODE################# #############
t_len=0
class WORK:
def getwork(self):
def formattable(table_to_process,type):
TYPE=["p","t","T","s","i"] #list of types to format
if type==TYPE[1]:
def format_t():
row=[]
for col in table_to_process:

#######################
# ERROR PRONE PART #
#######################
if len(str(col))>t_len:
t_len=len(str(col))
#######################
# Error message says: #
# UnboundLocalError: local variable 't_len' referenced before assignment#

row+=col
if (table_to_process.index(col)+1)%7==0:
t_temp.append(row)
row=[]
format_t()
################################################## ###############
wow.
Interpreter says that t_len is local variable although i have
specified t_len=0 in line 1. Also, although i've stated t_len=0 in
line 1, it says that t_len is referenced before assignment.
each function introduces a new scope.

</f>

Dec 23 '06 #2

P: n/a
Fredrik Lundh <fr*****@pythonware.comwrites:
Pyenos wrote:
#############################CODE################# #############
t_len=0
class WORK:
def getwork(self):
def formattable(table_to_process,type):
TYPE=["p","t","T","s","i"] #list of types to format
if type==TYPE[1]:
def format_t():
row=[]
for col in table_to_process:
#######################
# ERROR PRONE PART #
#######################
if len(str(col))>t_len:
t_len=len(str(col))
#######################
# Error message says: #
# UnboundLocalError: local variable 't_len' referenced before assignment#
row+=col
if (table_to_process.index(col)+1)%7==0:
t_temp.append(row)
row=[]
format_t()
################################################## ###############

wow.
Interpreter says that t_len is local variable although i have
specified t_len=0 in line 1. Also, although i've stated t_len=0 in
line 1, it says that t_len is referenced before assignment.

each function introduces a new scope.

</f>
does class WORK inherit t_len=0 from line1?

does def getwork() inherit t_len=0 from line1?

does def formattable(table_to_process,type) inherit t_len=0 from line1?

does def format_t() inherit t_len=0 from line1?

thanks.

Dec 23 '06 #3

P: n/a
Pyenos wrote:
Fredrik Lundh <fr*****@pythonware.comwrites:

>>Pyenos wrote:

>>>#############################CODE############## ################
t_len=0
class WORK:
def getwork(self):
def formattable(table_to_process,type):
TYPE=["p","t","T","s","i"] #list of types to format
if type==TYPE[1]:
def format_t():
row=[]
for col in table_to_process:
#######################
# ERROR PRONE PART #
#######################
if len(str(col))>t_len:
t_len=len(str(col))
#######################
# Error message says: #
# UnboundLocalError: local variable 't_len' referenced before assignment#
row+=col
if (table_to_process.index(col)+1)%7==0:
t_temp.append(row)
row=[]
format_t()
############################################### ##################

wow.

>>>Interpreter says that t_len is local variable although i have
specified t_len=0 in line 1. Also, although i've stated t_len=0 in
line 1, it says that t_len is referenced before assignment.

each function introduces a new scope.

</f>


does class WORK inherit t_len=0 from line1?

does def getwork() inherit t_len=0 from line1?

does def formattable(table_to_process,type) inherit t_len=0 from line1?

does def format_t() inherit t_len=0 from line1?

thanks.
Yes and no, depending.

The rule of thumb I use is that if you assign in a function, the name is
not taken from the enclosing scope. For example, compare:

# example 1
def doit():
t_len = 42
def nested():
print t_len
nested()

doit() # will print 42
# example 2
def doit():
t_len = 42
def nested():
if t_len 0:
print t_len
else:
t_len = 1
nested()

doit() # will get "referenced before assignment" error
You could make use of your WORK class here, depending on whether t_len
makes sense as a member of the WORK class:
class WORK:
t_len = 0
def getwork(self):
def formattable(table_to_process,type):
# etc., etc.
WORK.t_len = len(str(col))

James
--
James Stroud
UCLA-DOE Institute for Genomics and Proteomics
Box 951570
Los Angeles, CA 90095

http://www.jamesstroud.com/
Dec 23 '06 #4

P: n/a
James Stroud <js*****@mbi.ucla.eduwrites:
>>#############################CODE############### ###############
t_len=0
class WORK:
def getwork(self):
def formattable(table_to_process,type):
TYPE=["p","t","T","s","i"] #list of types to format
if type==TYPE[1]:
def format_t():
row=[]
for col in table_to_process:
#######################
# ERROR PRONE PART #
#######################
if len(str(col))>t_len:
t_len=len(str(col))
#######################
# Error message says: #
# UnboundLocalError: local variable 't_len' referenced before assignment#
row+=col
if (table_to_process.index(col)+1)%7==0:
t_temp.append(row)
row=[]
format_t()
################################################ #################
based on your advice i will try to answer my own questions:
does class WORK inherit t_len=0 from line1?
yes.
does def getwork() inherit t_len=0 from line1?
no.
does def formattable(table_to_process,type) inherit t_len=0 from
line1?
no.
does def format_t() inherit t_len=0 from line1?
no.

thank you kindly.
Dec 23 '06 #5

P: n/a
Pyenos wrote:
does class WORK inherit t_len=0 from line1?

does def getwork() inherit t_len=0 from line1?

does def formattable(table_to_process,type) inherit t_len=0 from line1?

does def format_t() inherit t_len=0 from line1?
Not really, no. The global t_len is different than the local t_len--two
variables with the same name. You need to declare "global t_len" inside
your function so it knows that "t_len=..." is assigning to the old,
global variable instead of creating a new one.

See #6 here: http://zephyrfalcon.org/labs/python_pitfalls.html

-Max

Dec 23 '06 #6

P: n/a
"Max Wilson" <wi********@gmail.comwrites:
Pyenos wrote:
does class WORK inherit t_len=0 from line1?

does def getwork() inherit t_len=0 from line1?

does def formattable(table_to_process,type) inherit t_len=0 from line1?

does def format_t() inherit t_len=0 from line1?

Not really, no. The global t_len is different than the local t_len--two
variables with the same name. You need to declare "global t_len" inside
your function so it knows that "t_len=..." is assigning to the old,
global variable instead of creating a new one.

See #6 here: http://zephyrfalcon.org/labs/python_pitfalls.html

-Max
so, based on your advice, i think the answers are all no.
Dec 23 '06 #7

P: n/a
At Friday 22/12/2006 20:45, Pyenos wrote:
># Error message says: #
# UnboundLocalError: local variable 't_len' referenced before assignment#
See item 6 in "10 Python pitfalls":
<http://zephyrfalcon.org/labs/python_pitfalls.html>
--
Gabriel Genellina
Softlab SRL


__________________________________________________
Preguntá. Respondé. Descubrí.
Todo lo que querías saber, y lo que ni imaginabas,
está en Yahoo! Respuestas (Beta).
¡Probalo ya!
http://www.yahoo.com.ar/respuestas

Dec 23 '06 #8

P: n/a
Pyenos wrote:
does class WORK inherit t_len=0 from line1?

does def getwork() inherit t_len=0 from line1?

does def formattable(table_to_process,type) inherit t_len=0 from line1?

does def format_t() inherit t_len=0 from line1?
you may want to read the documentation:

http://docs.python.org/ref/naming.html

</F>

Dec 23 '06 #9

P: n/a
Pyenos wrote:
does class WORK inherit t_len=0 from line1?

does def getwork() inherit t_len=0 from line1?

does def formattable(table_to_process,type) inherit t_len=0 from line1?

does def format_t() inherit t_len=0 from line1?
you may want to read the documentation:

http://docs.python.org/ref/naming.html

</F>

Dec 23 '06 #10

This discussion thread is closed

Replies have been disabled for this discussion.