예외 작업이 수행되어야하는 모든 작업 (예외가 발생하는 경우)이 아니라면 파일을 삭제해야합니다. 을 사용하는 것만 큼 간단하고 파일을 삭제 한 다음 예외를 다시 제기 할 수 있지만 그럴 경우 어떤 이유에서든지 을 제외한 파일을 삭제할 수없는 경우 원래 예외가 사라집니다. .예외가 발생한 경우에만 개체 정리
내가 가지고 올 수 있었다 그 가장은 이것이다 :
try:
file_path = "whatever.jpg"
# do stuff with file
except:
exception_raised = True
raise
finally:
try:
if exception_raised:
os.unlink(file_path)
except:
pass
return file_path # everything OK
는 사람이 더 나은, 더 파이썬 방법을 알고 있나요?
물론 이것은 'BaseException'에서 파생되지 않은 예외에 대해서는 작동하지 않습니다. – Mankarse
@Mankarse : Python 3에서 모든 예외는 BaseException에서 파생되어야합니다. Python 2에서 예외 클래스는 'BaseExcpetion'에서 파생되거나 구식 클래스 여야합니다. 올드 스타일 클래스는 10 년 동안 단계적으로 사라져 가고 있기 때문에 이상한 예외 클래스를 사용하는 * 아주 * 오래된 라이브러리를 사용하지 않는다면 위의 코드는 매우 안전해야합니다. –
@Mankarse : Python 2.x의 코드에 다른 문제가있었습니다. 예외의 추적을 잃었습니다. 이 문제를 해결하면 (부전공) 제한이 'BaseException'으로 제거되었습니다. –