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