728x90
__del__ 함수는 python의 ResourceWarnings를 예방하기위해 열려있는 file handler를 닫는 용도로 사용된다.
하지만 __del__ 함수는 다음과 같은 단점들을 가지고 있다.
1. __del__ 함수는 참조된 object의 개수가 0이 될 때까지 호출되지 않는다. 그래서 resource handler가 필요 이상으로 사용되거나 열러있다.
2. __del__함수는 system exit가 될 때 실행이 보장되지 않는다. (Python documentation)
It is not guaranteed that __del__() methods are called for objects that still exist when the interpreter exits.
3. __del__ 함수 안에서 발생하는 Exception은 발생하는 대신 무시된다. 이것은 bug들을 숨긴다는 의미이다.
Warning: Due to the precarious circumstances under which __del__() methods are invoked, exceptions that occur during their execution are ignored, and a warning is printed to sys.stderr instead.
따라서 파일을 사용하지 않을때는 항상 resource handler를 닫아야한다.
코드를 확인해보면 다음과 같다.
# Before
im = Image.open("hopper.png")
im.save("out.jpg")
# After
with Image.open("hopper.png") as im:
im.save("out.jpg")
[reference]
728x90
'Temp' 카테고리의 다른 글
[Ubuntu] Not writeable (0) | 2022.09.13 |
---|---|
Ubuntu 18.04 Install (0) | 2022.09.07 |
[Ubuntu 18.04] Failed to start NVIDIA Persistence Daemon (0) | 2022.09.05 |
모든 Nvidia & CUDA 제거 (0) | 2022.09.03 |
pytorch cuda 11.3과 cuda 10.2의 속도 차이 (0) | 2022.08.05 |