我正在尝试编写一个生成器函数,从数据库中获取行并逐个返回它们。然而,我不确定下面标有**的清理代码是否按照我想象的那样执行。如果没有执行,将清理代码放在生成器内部并在最后一个yield语句之后执行的最佳方法是什么?我查看了捕获StopIteration,但似乎是从调用者而不是从生成器中完成的。
def MYSQLSelectGenerator(stmt):
...
try:
myDB = MySQLdb.connect(host=..., port=..., user=..., passwd=..., db=...)
dbc=myDB.cursor()
dbc.execute(stmt)
d = "asdf"
while d is not None:
d = dbc.fetchone() #can also use fetchmany() to be more efficient
yield d
dbc.close() #** DOES THIS WORK AS I INTEND, MEANING AS SOON AS d = "None"
except MySQLdb.Error, msg:
print("MYSQL ERROR!")
print msg
finally
子句并将清理放在其中 - 看起来这就是它的预期用途。try语句 - wwii