스택큐힙리스트

파이썬에서 "with" 블록 내에서 리턴하면 파일은 여전히 닫힐까요? 본문

카테고리 없음

파이썬에서 "with" 블록 내에서 리턴하면 파일은 여전히 닫힐까요?

스택큐힙리스트 2023. 4. 4. 16:31
반응형

다음을 고려하십시오:

with open(path, mode) as f:

return [line for line in f if condition]

파일이 제대로 닫히거나, return을 사용하면 context manager를 우회하는 것인가요?

답변 1

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

이는 또한 #$$##@^^#$&의 예시 중 하나에서도 언급되는데, 이는 with 문장의 명세입니다.

with locked(myLock):

# Code here executes with myLock held. The lock is

# guaranteed to be released when the block is left (even

# if via return or by an uncaught exception).

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

답변 2

파이썬에서 with 블록 안에서 return을 사용하면 파일은 여전히 닫힐까요?

with 블록은 파일이나 다른 자원을 열고 사용한 후 자동으로 닫히게 해주는 유용한 방법입니다. 파이썬에서 with 블록 안에서 파일을 열면, 코드가 끝나면 파일이 자동으로 닫히게 됩니다. 그렇다면 with 블록안에서 return문을 사용하면 어떤 일이 발생할까요?

답은 예, 파일은 여전히 닫힙니다. with 블록 안에서 return 문을 사용하더라도, 블록을 벗어나면 파일은 자동으로 닫힙니다. 이것은 코드가 복잡해지는 것을 방지하고, 파일을 열기만 했더라도 항상 명시적으로 닫아주어야하는 일을 피할 수 있게 해줍니다.

그러나, 파일을 닫기 전에 return문으로 빠져나간다면, 파일에 대한 작업을 완전하게 처리하지 못할 수 있습니다. 이런 경우에는 with 블록 밖에서 파일을 명시적으로 닫아주거나, 오류를 처리하고 파일을 닫아야합니다.

결론적으로, with 블록 안에서 return문을 사용해도 파일은 자동으로 닫힙니다. 그러나 파일 작업에 대한 완전한 처리를 위해서는 코드를 주의깊게 작성하고, 명시적으로 파일을 닫아주는 것이 좋습니다.

반응형
Comments