Problem with global

Florian Lindner Florian.Lindner at xgm.de
Fri Oct 12 17:01:59 EDT 2007


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



More information about the Python-list mailing list