닫 sqlite3 데이터베이스에서 종료,no matter what
-
21-12-2019 - |
문제
나는 현재 스크립트를 작성하는 사용 sqlite3.나는 최근에 달린 문제가 데이터베이스는 다른 프로그램에서 사용으로 인해 내는 코드 종료 초과 오류가 있습니다.
와 유사한 문제 중 하나는 일반적으로 사용:
conn = sqlite3.connect(...)
try:
#Do stuff
finally:
conn.close()
하지만 이 작동하지 않을 수도 있습니다.간단히 말해서,이것은 나의 코드:
가져오기 sqlite3
class Thingamadoodle:
def __init__(self, ...):
self.conn = sqlite3.connect(...)
...
#Methods and stuff
def __del__(self):
self.conn.close()
poop = Thingamadoodle(...)
poop.do_stuff(...)
poop.throw_irritating_exception_that_you_cant_track_down(irritatingness=11)
후 프로그램을 종료없는 연결을 닫을 때,나는 오류를 얻을하려고 할 때 데이터베이스를 수정.
는 방법이 있을 안전하게 연결을 닫에도 부정 출?
해결책
솔직히 말해,저는 이해하지 못하는 질문,하지만 왜 그냥 포장 poop.do_stuff()
에 try/except
block?
try:
poop.do_stuff()
except:
poop.__del__()
finally:
poop.__del__()
나야 합니다,사용하는 컨텍스트 manager:
class Thingamadoodle:
def __init__(self, ...):
...
#Methods and stuff
def __enter__(self):
self.conn = sqlite3.connect(...)
return self
def __exit__(self, errorType, errorValue, errorTrace):
self.conn.close()
고 그것을 실행으로:
with Thingmadoodle(args) as poop:
#do things
후에는 모든 코드가 수행,또는 후에는 예외에서 일어난 문의 __exit__
실행됩니다,그리고 안전하게 닫을 수 있습니다.
희망이 도움이 됩니다!
제휴하지 않습니다 StackOverflow