Не могу закрыть соединение С БД в python

Есть скрипт, основная его часть это:

try:
    con = sqlite3.connect('Posts.db')
    cur = con.cursor()
...
except:
...
except:

finally:
    cur.close()
    con.close()

Дело в том, что у меня в коде после открытия соединения и курсора могут быть сгенерированы ошибки, и я хочу закрывать соединение независимо от того, произошли ошибки или нет.

Как это лучше оформить? В каждом except у меня после принта ошибки стоит raise SystemExit. Если я напишу в finally:

cur.close()
con.close()

то до их выполнения дело может и не дойти? Да и интерпретатор выводит ошибку NameError: name 'cur' is not defined


Ответы (1 шт):

Автор решения: gil9red

Ошибка NameError: name 'cur' is not defined происходит при обращении к переменной, что не была инициализирована (считай, создана), поэтому заранее создаете их, а в finally проверяете, что у них есть значения:

con = None
cur = None

try:
    con = sqlite3.connect('Posts.db')
    cur = con.cursor()
...
except:
...
except:

finally:
    if cur is not None:
        cur.close()

    if con is not None:
        con.close()
→ Ссылка