Custom Classes?

J. Cliff Dyer jcd at unc.edu
Wed Apr 30 13:35:20 EDT 2008



On Wed, 2008-04-30 at 11:02 -0500, Victor Subervi wrote:
> Hi;
> I have the following code which produces a file every time I need to
> display an image from MySQL. What garbage! Surely, python is capable
> of better than this, but the last time I asked for help on it, I got
> no responses. Is this only possible with custom classes? Please, give
> me some guidance here!
> try:
> 
>   w += 1
> 
>   getpic = "getpic" + str(w) + ".py"
> 
>   try:
> 
>     os.remove(getpic)
> 
>   except:
> 
>     pass
> 
>   code = """
> 
> #!/usr/local/bin/python
> 
> import cgitb; cgitb.enable()
> 
> import MySQLdb
> 
> import cgi
> 
> import sys,os
> 
> sys.path.append(os.getcwd())
> 
> from login import login
> 
> user, passwd, db, host = login()
> 
> form = cgi.FieldStorage()
> 
> picid = int(form["id"].value)
> 
> x = int(form["x"].value)
> 
> pics =
> {1:'pic1',2:'pic1_thumb',3:'pic2',4:'pic2_thumb',5:'pic3',6:'pic3_thumb',7:'pic4',8:'pic4_thumb',\
> 
> 9:'pic5',10:'pic5_thumb',11:'pic6',12:'pic6_thumb'}
> 
> pic = pics[x]
> 
> print 'Content-Type: text/html'
> 
> db = MySQLdb.connect(host=host, user=user, passwd=passwd, db=db)
> 
> cursor= db.cursor()
> 
> sql = "select " + pic + " from products where id='" + str(picid) +
> "';"
> 
> cursor.execute(sql)
> 
> content = cursor.fetchall()[0][0].tostring()
> 
> cursor.close()
> 
> print 'Content-Type: image/jpeg'
> 
> print
> 
> print content
> 
> """
> 
>   script = open(getpic, "w")
> 
>   script.write(code)
> 
>   print '<td><input type="hidden" name="%s"' % str(x), ' value="%s">'
> % pic
> 
>   print '<img src="%s?id=%d&x=%d"><br /><br /></td>\n' % (getpic, d,
> y)
> 
>  
> TIA,
> Victor

Victor,

Once again, you've posted code that doesn't work.  Your outer try block
is never terminated, and w is never initialized (so will raise an
exception inside your try block, which you probably won't see, if you
catch all exceptions.  Generally speaking, unless you know what you're
trying to catch, it's better to leave off the try/except block,
*especially* during development.  Stack traces are full of good
information.

Second, you never initialize w, which causes the following problem.  

$  python
Python 2.3.4 (#1, Nov 20 2007, 15:18:15) 
[GCC 3.4.6 20060404 (Red Hat 3.4.6-9)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> w += 1
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
NameError: name 'w' is not defined
>>> 

Third, double-spacing your code makes it difficult to read.  Take out
blank lines, unless they add contextual hints which improve readability.

Post working code, and I'll answer your actual question.

Cheers,
Cliff


> 
-- 
Oook,
J. Cliff Dyer
Carolina Digital Library and Archives
UNC Chapel Hill




More information about the Python-list mailing list