On Tue, Jun 8, 2010 at 2:00 AM, ch1zra <ch1...@gmail.com> wrote: > On Jun 8, 10:29 am, Richard Thomas <chards...@gmail.com> wrote: >> On Jun 8, 9:03 am, ch1zra <ch1...@gmail.com> wrote: >> > I have following code : >> >> > import os, time, re, pyodbc, Image, sys >> > from datetime import datetime, date, time >> > from reportlab.lib.pagesizes import A4 >> > from reportlab.lib.units import cm >> > from reportlab.pdfgen import canvas >> > from reportlab.pdfbase import pdfmetrics >> > from reportlab.pdfbase.ttfonts import TTFont >> > import mkTable >> >> > mkTable.mkTable() >> >> > and then file mkTable.py located in same directory has : >> >> > def mkTable(): >> > global canvas >> > canvas = canvas.Canvas(fname, pagesize=A4) >> > ... and so on >> >> > this gives me following traceback: >> >> > Traceback (most recent call last): >> > File "C:\py\pdf_test.py", line 36, in <module> >> > mkTable.mkTable() >> > File "C:\py\mkTable.py", line 38, in mkTable >> > canvas = canvas.Canvas("K_lista.pdf", pagesize=A4) >> > UnboundLocalError: local variable 'canvas' referenced before >> > assignment >> >> > i haven't posted entire code, because those lines are giving me >> > problems. I've searched the web, and all say that I should make var >> > global inside function. so I did it, but still nothing... >> > using python 2.6.2 and reportlab 2.4 >> > help plz :) >> >> The version of mkTable.py you posted is clearly different to the one >> in the traceback. You might want to check that. >> >> Richard. > > here's full version of mkTable.py (I've cut out all the drawing code > for clarity) > http://bpaste.net/show/7003/ > > and it's caller : > http://bpaste.net/show/7004/ > > and the newest traceback (just generated): > > Traceback (most recent call last): > File "C:\py\pdf_test.py", line 36, in <module> > mkTable.mkTable() > File "C:\py\mkTable.py", line 38, in mkTable > canvas.setFillColorRGB(0.8,0.8,0.8) > UnboundLocalError: local variable 'canvas' referenced before assignment
mkTable.py: # -*- coding: utf-8 -*- def mkTable(): global canvas <snip> canvas = canvas.Canvas("K_lista.pdf", pagesize=A4) The only global variable defined in mkTable.py is the "mkTable" function (partly since you don't import anything). So the reference to the global variable "canvas" on the right-hand side of this expression is completely undefined, resulting in the error you're getting. In this respect, your code is akin to: whatever.py: # -*- coding: utf-8 -*- def foo(): global x x = 2 * x foo() # This is obviously horribly flawed since x is never given an initial value! #EOF More generally, your code uses "canvas" to refer both to the module reportlab.pdfgen.canvas and an instance of the class reportlab.pdfgen.canvas.Canvas; this is confusing and problematic. I suggest you either rename one of them to something distinct (e.g. `import reportlab.pdfgen.canvas as pdfcanvas`), or import just the class Canvas straight from reportlab.pdfgen.canvas (i.e. `from reportlab.pdfgen.canvas import Canvas`). Cheers, Chris -- http://blog.rebertia.com -- http://mail.python.org/mailman/listinfo/python-list