본문 바로가기
프로그래밍/[Python] 파이썬

[Python] 파이썬 with문 사용법 핵심 요약 정리

by GenieIT* 2025. 1. 21.
728x90
728x90

 

파이썬 with문이란?

파이썬의 with문은 컨텍스트 관리자(context manager)를 사용하여 특정 작업의 시작과 종료를 자동으로 관리해주는 구문입니다. 주로 파일 작업이나 리소스 관리(예: 데이터베이스 연결, 네트워크 연결 등)에 사용되며, 블록이 종료되면 자동으로 정리 작업을 수행합니다. 이를 통해 코드의 가독성을 높이고, 리소스 누수를 방지할 수 있습니다.

 


 

기본 문법

with 컨텍스트_관리자 as 변수:
    # 블록 내부에서 변수 사용
    pass  # 작업 수행

💡 동작 과정

  1. 컨텍스트 관리자: __enter__ 메서드가 호출되어 필요한 설정 작업을 수행.
  2. as 변수: __enter__의 반환값이 변수에 할당(선택 사항).
  3. 블록 실행: 블록 내부의 작업 수행.
  4. 블록 종료 후: __exit__ 메서드가 호출되어 정리 작업 수행(예: 파일 닫기).

 


 

파일 읽기, 쓰기 예제 코드

with문을 사용하면 파일을 열고 닫는 과정을 자동으로 처리할 수 있습니다.

💡 파일 읽기

with open('example.txt', 'r', encoding='utf-8') as file:
    content = file.read()
    print(content)  # 파일 내용 출력
# 블록 종료 시 자동으로 파일 닫힘

 

💡 파일 쓰기

with open('example.txt', 'w', encoding='utf-8') as file:
    file.write('Hello, World!')
# 블록 종료 시 파일이 자동으로 닫힘

 


 

with문의 장점

💡 자동 자원 관리

with문을 사용하면 명시적으로 파일을 닫는 작업이 필요 없습니다.

일반적인 파일 처리 방법 (반드시 닫아야 함): 

file = open('example.txt', 'r', encoding='utf-8')
try:
    content = file.read()
finally:
    file.close()  # 반드시 닫아야 함

with문 사용 (자동으로 닫힘):

with open('example.txt', 'r', encoding='utf-8') as file:
    content = file.read()
# 자동으로 파일 닫힘

 

💡 에러 발생 시에도 안전

블록 내부에서 예외가 발생해도 __exit__ 메서드가 호출되므로 리소스가 안전하게 해제됩니다.

 


 

커스텀 컨텍스트 관리자 만들기

💡 사용자 정의 컨텍스트 관리자 만드는 방법

컨텍스트 관리자는 __enter__와 __exit__라는 두 가지 특별 메서드를 구현해야 합니다.

  • __enter__ 메서드
    • 블록 실행 전에 호출됩니다.
    • 반환값은 as 뒤에 오는 변수에 할당됩니다.
  • __exit__ 메서드
    • 블록 실행이 끝난 후 호출됩니다.
    • 예외가 발생해도 호출되며, 예외를 처리할 수 있습니다.

 

💡 간단한 예제 코드

class CustomContextManager:
    def __enter__(self):
        print("블록 시작!")
        return "컨텍스트 반환값"

    def __exit__(self, exc_type, exc_value, traceback):
        print("블록 종료!")
        if exc_type:
            print(f"예외 발생: {exc_value}")
        return True  # 예외를 무시

# 사용
with CustomContextManager() as value:
    print(f"값: {value}")
    # 예외 발생 테스트
    raise ValueError("예외 테스트")
print("정상적으로 종료")


'''
출력 결과

블록 시작!
값: 컨텍스트 반환값
블록 종료!
예외 발생: 예외 테스트
정상적으로 종료
'''

__exit__ 매개변수 설명

  • exc_type: 예외 타입 (없으면 None).
  • exc_value: 예외 객체.
  • traceback: 예외 발생 시의 스택 정보.

 


 

with문의 다양한 활용

💡 파일 작업

with open('example.txt', 'r') as file:
    data = file.read()

 

💡 데이터베이스 연결

import sqlite3

with sqlite3.connect('example.db') as conn:
    cursor = conn.cursor()
    cursor.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER, name TEXT)")
    conn.commit()

 

💡 스레드 잠금

import threading

lock = threading.Lock()

with lock:
    # 임계 영역
    print("스레드 안전 작업 실행")

 

💡 HTTP 요청

import requests

with requests.get('https://example.com') as response:
    print(response.text)

 


 

요약

  • with문은 리소스를 자동으로 관리하고, 예외가 발생해도 안전하게 정리할 수 있도록 설계된 파이썬의 강력한 기능입니다.
  • __enter__와 __exit__를 구현하여 사용자 정의 컨텍스트 관리자도 쉽게 만들 수 있습니다.
  • 파일 작업, 네트워크 연결, 스레드 잠금 등 다양한 상황에서 활용할 수 있습니다.
반응형

 

 

 

 

 

728x90