보통 프로그램의 접근 방식
1. 파일에 접근
2. 파일 내용등을 읽고 쓰고 삭제하고 수정하는 등등 무언가의 일의 수행
3. 파일을 해제(close) 하는 패턴
예를 들어 우리가 엑셀 파일을 열으면 파일을 열고 있는 동안 다른 프로그램에서 엑셀 파일에 접근할 수 없게 된므로 파일을 열었으면 닫아주는 일은 필수이다.
보통 close() 등과 같은 메소드를 사용하며 여기에는 숨은 문제점이 존재
파일 처리를 수행하는 도중에 오류가 발생하게 되면 close() 문을 실행할 수 없고 그렇게 되면 이 파일은 영원히 닫을 수가 없게 된다.
with 문은 그 구문을 실행했을 때 오류가 발생하든 안하든 마지막에 close 를 해주도록 하는 것
파이썬은 특수메소드를 사용
클래스를 알고 있다면 이해하기 쉬울 것이다.
enter 와 exit 특수메소드를 가진 객체에 with 문을 사용가능
with 문 내 표현식은 한 객체로 평가
객체의 enter 메서드가 호출되고 끝으로 호출 결과가 변수에 할당되며 블록을 모두 실행하면 블록에서 오류가 발생했더라도 파이썬은 그 객체에 exit 메서드를 호출하게 됨
파일 객체의 exit 메소드는 파일을 닫는다.
with <expression> as <variable>:
<block>
with open('textfile.txt', 'r') as file:
contents = file.read()
# 위 구문과 동일한 내용
file = open('textfile.txt', 'r')
contents = file.read()
file.close()