Home [Python] with as 구문 정리
Post
Cancel

[Python] with as 구문 정리

Python with ~ as 구문

  • with as는 파일을 열고 > 쓰고 > 닫기 를 자동으로 해준다.

사용법

  • with [expression] as [변수명]
1
2
3
4
5
6
7
8
with open('textfile.txt', 'r') as file:
    contents = file.read()


# 위 구문과 동일한 내용
file = open('textfile.txt', 'r')
contents = file.read()
file.close()
  • 두번째 코드를 실행한다고 할때 만약에 content = file.read() 에서 에러가 난다면 file 을 닫을 수 없다.
  • 그러나 with 문을 사용하면 에러가 나더라도 file 을 자동으로 닫아준다.

with을 class에 응용

  • open 함수 이외의 사용이 끝난 객체를 종료
  • with 구문의 표현식을 open함수 이외에 사용자가 임의로 정의한 클래스 객체로 정의, 사용시 class 내부 메소드에 enter(),exit() 메소드에 대한 내용을 입력해야 한다
  • 객체가 실핼될 때 enter()가 자동으로 호출, 종료 될때 exit()를 호출
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Withest:
  #초기화 메서드 정의
  def __init__(self):
    self.temp = "초기화 메서드"

  #객체가 호출될 때 자동으로 실행
  def __enter__(self):
    print(self.temp)
    return self # 반환값이 있어야 Variable을 블록내에서 사용할 수 있다

  def printText(self):
    print("메소드 호출 테스트")

   #with 구문 통해 객체가 종료될 때 자동으로 실행
   def __exit__(self, exc_type, exc_val, exc_tb):
    #exc_type, exc_val, exc_tb는 with 문을 빠져나오기 이전에 예외가 발생했을 때를 나타내는 정보

    #종료 구문 설정하기(세션의 종료 등)
    print("with 통해 종료")
# 객체 생성 및 with 구문 실행
if __name__ = "__main__":
  withclass = Withest()

  with withclass as wc:
    wc.printText()

# >>
# 초기화 메서드
# 메소드 호출 테스트
# with 통해 종료
This post is licensed under CC BY 4.0 by the author.