[EMAIL PROTECTED] a écrit : > On Feb 19, 11:09 am, Jean-Paul Calderone <[EMAIL PROTECTED]> wrote: > >>On 19 Feb 2007 09:04:19 -0800, "[EMAIL PROTECTED]" <[EMAIL PROTECTED]> wrote: >> >> >>>Hi, >> >>>I have the following code: >> >>>colorIndex = 0; >> >>>def test(): >>> print colorIndex; >> >>>This won't work. >> >>Are you sure? >> >> [EMAIL PROTECTED]:~$ cat foo.py >> colorIndex = 0 >> >> def test(): >> print colorIndex >> >> test() >> [EMAIL PROTECTED]:~$ python foo.py >> 0 >> [EMAIL PROTECTED]:~$ >> >>The global keyword lets you rebind a variable from the module scope. It >>doesn't have much to do with accessing the current value of a variable. >> >>Jean-Paul > > > Thanks. Then I don't understand why I get this error in line 98: > > Traceback (most recent call last): > File "./gensvg.py", line 109, in ? > outdata, minX, minY, maxX, maxY = getText(data); > File "./gensvg.py", line 98, in getText > print colorIndex; > UnboundLocalError: local variable 'colorIndex' referenced before > assignment > > > Here is my complete script: > #!/usr/bin/python > > import re > import sys > import time > import os > import shutil > > colors = ["#FF0000", "#00FF00", "#0000FF", > "#FFFF00" ,"#FFA500" ,"#DA70D6"] > colorIndex = 0 > > def getText( intputstr): > rc = "" > > maxX = 0; > maxY = 0; > minX = 10000000; > minY = 10000000; > > > for str in intputstr:
don't use str as an indentifier unless it's ok for you to shadow the builtin type str. > print str; > > if str != "": if str: > pattern = "x:(\d+) y:(\d+) w:(\d+) h:(\d+) (.*)" > match = re.findall(pattern, str) Move loop invariants (here, your pattern) outside of the loop. And while you're at it, compile it. > if match: > x, y, width, height, area = match[0] > > colorIndex = colorIndex + 1 You're not reading colorIndex, you're rebinding it. In this case, you do need to declare it global (or better, to rethink your code to avoid globals). > rc = rc + "<rect x=\"%(x)s\" y=\"%(y)s\" width=\"% > (width)s\" height=\"%(height)s\" " % locals() Using augmented assignment (ie : +=) may be more readable here (MHO). Also, if you use single quotes for the template string, you can save the escapes: rc += '<rect x="%(x)s" y="%(y)s" width="% (width)s " height="%(height)s' " % locals() And FWIW, you might want to define the template string outside the loop. > rc = rc + "fill=\"%s\" stroke=\"#000000\" stroke-width= > \"1px\" fill-opacity=\".5\" />\n" % colors[colorIndex % len(colors)] idem (snip) -- http://mail.python.org/mailman/listinfo/python-list