코딩교육/Python 초등교육에서 전문가까지

1단계 : 9. 함수와 모듈 (feat. 파일 작업에서 예외 처리)

제리토리 2025. 2. 5. 09:00
728x90
반응형

 

파일 작업 중에는 파일이 존재하지 않거나 읽기/쓰기 권한이 없는 등 여러 예외 상황이 발생할 수 있습니다. Python에서는 **예외 처리(Exception Handling)**를 통해 파일 작업의 안정성을 높이고 프로그램의 중단을 방지할 수 있습니다. 이 장에서는 파일 작업 중 발생할 수 있는 주요 예외와 이를 처리하는 방법을 살펴봅니다.

 

 

1. 예외 처리의 필요성

 

 

파일 작업 중 다음과 같은 문제를 방지하려면 예외 처리가 필요합니다:

 

   • 파일 없음: 열려고 하는 파일이 존재하지 않을 때.

   • 쓰기 권한 부족: 파일 쓰기 작업 시 권한이 없을 때.

   • 잘못된 경로: 경로가 올바르지 않을 때.

   • 파일 포맷 오류: 파일의 내용이 예상한 형식이 아닐 때.

 

Python에서는 try-except 구문을 사용하여 이러한 상황을 처리할 수 있습니다.

 

 

 

2. 기본 예외 처리: try-except

 

 

try-except 구문은 예외가 발생할 가능성이 있는 코드를 처리하는 기본적인 방법입니다.

 

   ㉮ 기본 구조

try:
    파일 작업 코드
except 예외타입:
    예외 발생 시 실행할 코드

 

      예제: 파일 열기 예외 처리

try:
    file = open("nonexistent.txt", "r")
    content = file.read()
    file.close()
except FileNotFoundError:
    print("파일이 존재하지 않습니다.")

 

      결과:

파일이 존재하지 않습니다.

 

 

 

3. 주요 예외 종류와 처리 방법

 

 

   ㉮ FileNotFoundError

 

      파일이 존재하지 않을 때 발생합니다.

 

      예제

try:
    file = open("data.txt", "r")
    content = file.read()
except FileNotFoundError:
    print("지정된 파일을 찾을 수 없습니다.")

 

 

   ㉯ PermissionError

 

      파일에 대한 읽기 또는 쓰기 권한이 없을 때 발생합니다.

 

      예제

try:
    file = open("/root/protected.txt", "w")
    file.write("Hello")
except PermissionError:
    print("파일에 대한 쓰기 권한이 없습니다.")

 

 

   ㉰ IsADirectoryError

 

      파일 대신 디렉터리를 열려고 할 때 발생합니다.

 

      예제

try:
    file = open("some_directory", "r")
except IsADirectoryError:
    print("디렉터리가 아닌 파일을 지정하세요.")

 

 

   ㉱ IOError

 

      파일 작업 중 일반적인 입출력 오류가 발생할 때 발생합니다.

 

      예제

try:
    file = open("data.txt", "r")
except IOError:
    print("파일 작업 중 오류가 발생했습니다.")

 

 

 

4. finally 블록으로 자원 정리

 

 

파일 작업 후 파일을 반드시 닫아야 하는 경우, finally 블록을 사용하여 정리 작업을 수행합니다.

 

   ㉮ 기본 구조

try:
    파일 작업 코드
except 예외타입:
    예외 발생 시 실행할 코드
finally:
    정리 작업

 

      예제: 파일 닫기 보장

try:
    file = open("example.txt", "r")
    content = file.read()
except FileNotFoundError:
    print("파일이 존재하지 않습니다.")
finally:
    if 'file' in locals() and not file.closed:
        file.close()
        print("파일이 닫혔습니다.")

 

 

 

5. with문으로 예외 처리 간소화

 

 

with문은 파일 작업에서 파일 닫기를 자동으로 처리해주기 때문에 예외 처리 시 유용합니다.

 

   예제

try:
    with open("example.txt", "r") as file:
        content = file.read()
        print(content)
except FileNotFoundError:
    print("파일을 찾을 수 없습니다.")

 

 

 

6. 사용자 정의 예외 처리

 

 

필요에 따라 사용자 정의 예외를 생성하고 처리할 수 있습니다.

 

   예제

class FileTooLargeError(Exception):
    pass

try:
    file = open("large_file.txt", "r")
    content = file.read()
    if len(content) > 10000:
        raise FileTooLargeError("파일이 너무 큽니다.")
except FileTooLargeError as e:
    print(e)

 

 

 

7. 파일 작업 예외 처리 실용 예제

 

 

   ㉮ 사용자 입력 파일 열기

filename = input("열 파일 이름을 입력하세요: ")

try:
    with open(filename, "r") as file:
        print(file.read())
except FileNotFoundError:
    print("파일을 찾을 수 없습니다.")
except PermissionError:
    print("파일에 대한 접근 권한이 없습니다.")

 

   ㉯ 데이터 쓰기 및 읽기 예외 처리

try:
    with open("output.txt", "w") as file:
        file.write("Python 예외 처리 연습!")
except IOError:
    print("파일에 데이터를 쓰는 중 문제가 발생했습니다.")

 

   ㉰ 파일 존재 여부 확인 후 작업

import os

filename = "example.txt"

if os.path.exists(filename):
    with open(filename, "r") as file:
        print(file.read())
else:
    print("파일이 존재하지 않습니다.")

 

 

 

8. 예외 처리 시 주의사항

 

 

   ㉮ 특정 예외만 처리하기:

      • 너무 일반적인 예외(Exception)를 처리하면 디버깅이 어려워질 수 있습니다.

except Exception:
    print("알 수 없는 오류가 발생했습니다.")  # 사용 시 주의

 

   ㉯ 파일 작업의 정리 보장:

      • 파일을 반드시 닫아야 하는 경우 finally 블록 또는 with문을 사용하세요.

 

  ㉰ 오류 메시지 출력:

      • 발생한 예외에 대한 상세한 정보를 출력하려면 e 객체를 사용하세요.

except FileNotFoundError as e:
    print(f"오류: {e}")

 

   ㉱ 예외 조건 최소화:

      • 파일이 존재하는지 사전에 확인하여 불필요한 예외를 방지하세요.

 

 

 

9. 요약

 

파일 작업 중 예외는 언제든 발생할 수 있으며, 이를 적절히 처리하지 않으면 프로그램이 중단될 수 있습니다. Python의 try-except 구문with을 활용하면 파일 작업의 안정성을 높이고, 다양한 예외 상황에 대응할 수 있습니다.

 

핵심 정리

 

   ㉮ 주요 예외 종류:

      • FileNotFoundError, PermissionError, IsADirectoryError, IOError.

 

   ㉯ try-except 구문:

      • 파일 작업 중 발생할 수 있는 예외를 처리.

 

   ㉰ finally 블록:

      • 자원 정리를 보장.

 

   ㉱ with:

      • 파일 닫기를 자동으로 처리하여 간결한 코드 작성 가능.

 

728x90
반응형