Larry Bates wrote: > Florian Lindner wrote: >> Hello, >> I have a little problem with the global statement. >> >> def executeSQL(sql, *args): >> try: >> import pdb; pdb.set_trace() >> cursor = db.cursor() # db is <type 'NoneType'>. >> [...] >> except: >> print "Problem contacting MySQL database. Please contact root." >> sys.exit(-1) >> >> >> db = None # Global Variable for DB connection >> >> def main(): >> [...] >> global db >> db = MySQLdb.connect(...) >> [...] >> executeSQL(sql, args) >> >> >> Why isn't the global variable db not written in main() to be a mysql >> connection and still none type in executeSQL? >> >> Thanks, >> >> Florian > > Because you have it to let executeSQL know that it is global or it creates > a local copy in local namespace.
That's not right in the context because db is read before it written. Therefore the global copy springs into the local namespace. > def executeSQL(sql, *args): > global db > try: > import pdb; pdb.set_trace() > cursor = db.cursor() # db is <type 'NoneType'>. > [...] > except: > print "Problem contacting MySQL database. Please contact root." > sys.exit(-1) I've solved it. It was a problem you could not have possibly seen. Actually in my script executeSQL is called before db = MySQLdb.connect(..) is called. When I have simplified the code for the posting I've changed it made it right without knowing. Regards, Florian -- http://mail.python.org/mailman/listinfo/python-list