I'm pretty new to Python, here is some code I am looking at:
try:
connection = getConnection(database)
cursor = connection.cursor()
cursor.execute("some query")
except:
log.error("Problem.")
raise
finally:
cursor.close()
connection.close()
Is that being cleaned up properly? In other languages I have written in, I am used to doing something like this:
connection = None
cursor = None
try:
connection = getConnection(database)
cursor = connection.cursor()
cursor.execute("some query")
except:
log.error("Problem.")
raise
finally:
if cursor is not None:
cursor.close()
if connection is not None:
connection.close()
Python does not have block scope. Anything defined inside the
try
block will be available outside.That said, you would still have a problem: if it is the
getConnection()
call that raises the error,cursor
will be undefined, so the reference in thefinally
block will error.I'd suggest using contexts, like:
This should ensure the closing (see more here). In some cases, you won't even need
closing
since connection is most likely to support the context protocol itself, so that would be justwith getConnection(database)...