
👋 들어가기 전
현재 이미지 파일을 읽어 base 64로 변경하는 작업을 하고있는데
파이썬에서 특별한 keyword를 찾아 정리해본다.
with를 쓰지 않을 때 파일을 읽고 쓸때는 다음과 같이 작업을 해줘야했다.
f = open('example.txt', 'r')
sen = f.readline()
f.close()
열었으면 닫아야한다.
충분히 휴먼에러가 발생할 수 있는 부분이다.
또한 예외가 발생할경우 close 호출이 생략될 수도있다.
⛑ with 사용
사용 예시
1. 파일 열기 (open())
2. 데이터베이스 연결 (sqlite3.connect())
3. 멀티스레드 락 (threading.Lock())
4. 네트워크 연결 (socket)
with를 사용하면 작업이 끝나면 알아서 close를 호출해준다.
with open("test.png", "rb") as f:
image = Image.open(f) # 예외가 발생해도 자동으로 파일이 닫힘!
내부적으로 어떻게 동작할까??
ContextManager란
자원 설정에 중요한 역할을 하며, 연결을 열거나 자원이 더 이상
필요하지 않을 때 자동으로 정리하는 작업을 담당하는 객체를 의미한다.
특히 파이썬에서는 with 문과 함께 사용할 메서드를 정의하는 객체다.
with와 함께 쓰일려면 다음 메소드를 꼭 구현해줘야한다.
def __enter__(self): # 진입 시 호출됨
def __exit__(self, exc_type, exc_val, exc_tb): # 탈출 시 호출됨
# exc_type: 발생한 예외의 클래스 (Exception Type)
# exc_val: 발생한 예외의 인스턴스 (Exception Value)
# exc_tb: 예외가 발생한 트레이스백(traceback) 객체
# returnType: bool , True면 예외를 무시하고 계속실행, False면 예외 발생
한번 간단하게 만들어보자.
class ContextManager:
def __enter__(self):
print('enter...')
return self # `as` 뒤에 오는 값이 됨
def sayHello(self, name):
print('context' + name)
def __exit__(self, exc_type, exc_val, exc_tb):
print('exit...')
return False
with ContextManager() as c:
c.sayHello("name")
'''
output:
enter...
contextname
exit...
'''
'Programing Langauge > python' 카테고리의 다른 글
실행파일 배포하기 (0) | 2025.02.22 |
---|---|
메서드 체이닝 (0) | 2025.02.19 |