본문 바로가기
Python/Python FAQ

Python 파이썬에서 "with" 블록 내에서 return을 사용하면 파일이 여전히 닫히나요?, In Python, if I return inside a "with" block, will the file still close?

by 베타코드 2023. 12. 7.
반응형

질문


다음을 고려해보세요:

with open(path, mode) as f:
    return [line for line in f if condition]

파일은 제대로 닫힐까요? 아니면 return을 사용하는 것이 컨텍스트 매니저를 우회하는 방법이 있을까요?


답변


예, 이것은 try 블록 이후에 finally 블록처럼 작동합니다. 즉, 항상 실행됩니다 (물론 파이썬 프로세스가 비정상적인 방식으로 종료되지 않는 한).

with 문의 사양인 PEP-343의 예제 중 하나에도 언급되어 있습니다.

with locked(myLock):
    # 이곳의 코드는 myLock이 보유 될 때 실행됩니다. 블록을 떠날 때 락이
    # 해제되는 것이 보장됩니다 (반환 또는 처리되지 않은 예외로 인해 블록을 떠날 경우에도).

그러나 언급할 가치가 있는 것은 open() 호출로 발생하는 예외를 쉽게 잡을 수 없다는 것입니다. 일반적으로 원하지 않는 경우에는 전체 with 블록을 try..except 블록 안에 넣어야합니다.

반응형

댓글