문제

나는 현재 스크립트를 작성하는 사용 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__ 실행됩니다,그리고 안전하게 닫을 수 있습니다.

희망이 도움이 됩니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top