None
Larry Whitley
ldw at us.ibm.com
Wed Oct 24 17:13:43 EDT 2001
That's it! Here's the offending code, a little earlier in process().
elif pc.command == "dual": # command was a dual address cycle
pc.command, None, None = tr.decodeCommand()
Looks like it considers None a variable though it is not under the elif that
used it.
Thanks, I'll fix it up.
Larry
"Steve Holden" <sholden at holdenweb.com> wrote in message
news:yCBB7.18793$Nx2.278340 at atlpnn01.usenetserver.com...
> "Larry Whitley" <ldw at us.ibm.com> wrote in message
> news:9r6lep$tdg$1 at news.rchland.ibm.com...
> > Here's the traceback requested:
> >
> > C:\Projects\Pecos\Traces>analyze3
> > u:\trc45\pecos\ c:\projects\pecos\traces\ ('crusader091101.zip',
> > 'crusader091101
> > .dat', 'crusader091101.a3.txt')
> > Traceback (most recent call last):
> > File "C:\Projects\Pecos\Traces\analyze3.py", line 372, in ?
> > main()
> > File "C:\Projects\Pecos\Traces\analyze3.py", line 365, in main
> > process( localPath + files[1], localPath + files[2] ) # process the
> file
> > File "C:\Projects\Pecos\Traces\analyze3.py", line 336, in process
> > pc.runningReport( None, riostream ) # to stdout
> > UnboundLocalError: local variable 'None' referenced before assignment
> >
> AHA!!!!!
>
> This is your problem. The interpreter is telling you in this message that
it
> regards the name None as being that of a variable local to your function
or
> method. The ONLY reason it is making this assumption is because it has
seen
> an assignment to None somewhere in the function/method (in this case the
> "process()" function).
>
> > Here's the relevant section of code in the neighborhood of the error:
> > if pc.endCond != "":
> > pc.summarizeData()
> > riostream = pc.rio()
> > pc.runningReport( fout, riostream ) # to file
> > pc.runningReport( None, riostream ) # to stdout
> >
> At this point the assignment to None has not taken place. But this code is
> inside a function that assigns to None, so None is being treated as a
local
> variable.
>
> > The method runningReport() looks like this:
> > def runningReport(self, fout, riostream):
> > print >>fout, "%8d" % self.startCycn, "%8d" % self.endCycn,
"%6d"
> %
> > (self.endCycn - self.startCycn), \
> > "%8s" % self.command, "%10x" % self.startAddr, "%10x" %
> > self.endAddr, "%4d" % self.nBytes, \
> > "%8s" % self.endCond, riostream
> >
> > My idea was to setup the method to print to file and by substituting
None
> > for the file object, let the same method send the output to standard
out.
> >
> > Thanks for the help,
>
> You'll get there. See this:
>
> >>> def fOK(a):
> ... print "arg is", a, "None is", None
> ...
> >>> def fBAD(a):
> ... print "arg is", a, "None is", None
> ... None = "something, anything (except None!)"
> ...
> >>> fOK(42)
> arg is 42 None is None
> >>> fBAD(42)
> arg is 42 None isTraceback (innermost last):
> File "<interactive input>", line 1, in ?
> File "<interactive input>", line 2, in fBAD
> UnboundLocalError: Local variable 'None' referenced before assignment
> >>>
>
> Hope this helps.
>
> regards
> Steve
> --
> http://www.holdenweb.com/
>
>
>
>
>
More information about the Python-list
mailing list