Я пытаюсь написать генераторную функцию, которая получает строки из базы данных и возвращает их по одному. Тем не менее, я не уверен, что код очистки, помеченный ** ниже, выполняется, как я думаю. Если это не так, как лучше всего поместить код очистки внутри самого генератора, который выполняется после последней инструкции yield? Я посмотрел на ловушку StopIteration, но это, похоже, сделано от вызывающего, а не внутри генератора.лучший способ запустить код очистки генератора python
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''' и поместить туда чистку - похоже, именно так оно и предназначалось. [** ** ** **) (http://docs.python.org/2.7/reference/compound_stmts.html#the-try-statement) – wwii