본문 바로가기

withstatement4.2

Python 파이썬에서 "with" 블록 내에서 return을 사용하면 파일이 여전히 닫히나요?, In Python, if I return inside a "with" block, will the file still close? 질문 다음을 고려해보세요: with open(path, mode) as f: return [line for line in f if condition] 파일은 제대로 닫힐까요? 아니면 return을 사용하는 것이 컨텍스트 매니저를 우회하는 방법이 있을까요? 답변 예, 이것은 try 블록 이후에 finally 블록처럼 작동합니다. 즉, 항상 실행됩니다 (물론 파이썬 프로세스가 비정상적인 방식으로 종료되지 않는 한). with 문의 사양인 PEP-343의 예제 중 하나에도 언급되어 있습니다. with locked(myLock): # 이곳의 코드는 myLock이 보유 될 때 실행됩니다. 블록을 떠날 때 락이 # 해제되는 것이 보장됩니다 (반환 또는 처리되지 않은 예외로 인해 블록을 떠날 경우에도). 그러나 언급.. 2023. 12. 7.
Python 파이썬 객체를 올바르게 정리하는 방법은 무엇인가요?, How do I correctly clean up a Python object? 질문 클래스 Package: def __init__(self): self.files = [] # ... def __del__(self): for file in self.files: os.unlink(file) __del__(self)는 위에서 AttributeError 예외가 발생합니다. 나는 Python은 "전역 변수" (이 맥락에서는 멤버 데이터?)의 존재를 보장하지 않는다는 것을 이해합니다. __del__()가 호출될 때 예외의 원인이 이것이라면, 객체가 올바르게 해체되도록 어떻게 해야 할까요? 답변 파이썬의 with 문을 사용하여 정리해야 할 리소스를 관리하는 것을 추천합니다. 명시적인 close() 문을 사용하는 것의 문제는 호출을 완전히 잊거나 예외가 발생할 때 리소스 누출을 방지하기 위해 f.. 2023. 9. 13.