# Beginner question: use function to read text file

Gary Herron gherron at islandtraining.com
Tue Jun 27 03:30:43 CEST 2006

Luke wrote:
> I'm pretty stuck at the moment and wondering if anyone can spot the problem.
> Trying to create a function that will read a text file into a list and
> return that list.
>
> I wrote the following function and saved it as 'fileloader.py'
>
>     infile=open(fname)
>     dates =[]
>     times=[]
>     open=[]
>
Here's the problem.  You are using the name "open" it two contexts.  The
variable named "open" is a local variable, and as such it hides the
builtin function of the same name used to open files.   (It does not
matter that the use of "open" as a function precedes the use of "open"
variable in a def, then ANYWHERE in that def, that name refers to the
local variable and hides any uses of the name from enclosing scopes.)
If that last makes sense, good.  If not, then just follow this rule:
Choose your variable names to be different than any builtin names -- or
at least different than any of the builtin names you intend to use.

Gary Herron

>     high=[]
>     low=[]
>     close=[]
>     vol=[]
>     count=0
>     for line in infile:
>             item=line.split()
>             dates.append(item[0])
>             times.append(item[1])
>             open.append(item[2])
>             high.append(item[3])
>             low.append(item[4])
>             close.append(item[5])
>             vol.append(item[6])
>             #print
> dates[count],times[count],open[count],high[count],low[count],vol[count]
>             count=count+1
>
>
>     return dates,times,open,high,low,close
>
>
> Then I executed the following script (merge contract v1.py):
>
> filename='c:/Python24/test/testdata2.txt'
>
>
> I then get the following error messages:
>
> Traceback (most recent call last)
> File "C:\Python24\test\merge contract v1.py", in line3, in?
> infile=open(fname)
> UnboundLocalError: local variable 'open' referenced before assignment
> Script terminated
>
> Thanks for any help,
> Luke
>
>
>