TITEDIOS 편한 코딩

Python 기초강의: #20 파일 처리(3) - 파일 처리와 예외 처리 본문

파이썬

Python 기초강의: #20 파일 처리(3) - 파일 처리와 예외 처리

TitediosKW 2024. 7. 12. 19:00
반응형



파일 입출력은 많은 프로그램에서 필수적인 기능입니다. 그러나 파일을 다루다 보면 파일이 존재하지 않거나, 읽기/쓰기 권한이 없거나, 잘못된 형식의 파일을 읽는 등의 다양한 예외 상황이 발생할 수 있습니다. 이러한 예외 상황에 대비하여 적절한 예외 처리를 구현하는 것은 매우 중요합니다. 이 포스팅에서는 파이썬에서 파일 처리를 할 때 발생할 수 있는 예외와 이를 처리하는 방법을 알아보겠습니다.

1. 기본적인 파일 처리

우선, 파일을 여는 기본적인 방법부터 살펴보겠습니다. 이제는 많이 익숙해진 코드일 것으로 감히 예상해 봅니다ㅎㅎㅎ. 텍스트 파일을 읽고 쓰는 예제입니다.

# 파일 읽기
try:
    with open('example.txt', 'r', encoding='utf-8') as file:
        content = file.read()
        print(content)
except FileNotFoundError:
    print("파일을 찾을 수 없습니다.")
except IOError:
    print("파일을 읽는 동안 오류가 발생했습니다.")


이 예제는 example.txt 파일을 열고 내용을 읽어서 출력합니다. 만약 파일이 존재하지 않거나 읽기 권한이 없으면, FileNotFoundError 또는 IOError 예외가 발생하고, 적절한 메시지를 출력합니다.

2. 파일 쓰기

파일에 데이터를 쓸 때도 비슷한 방식으로 예외 처리를 할 수 있습니다. 읽기 예제와 모드만 다를 뿐 같은 코드입니다. 다만 쓰는 코드느 파일이 없는 오류가 발생하지 않기 때문에 IOError 처리만 추가하였습니다.

# 파일 쓰기
try:
    with open('example.txt', 'w', encoding='utf-8') as file:
        file.write('Hello, World!\n')
except IOError:
    print("파일을 쓰는 동안 오류가 발생했습니다.")


이 예제는 example.txt 파일을 열고 데이터를 씁니다. 만약 쓰기 권한이 없거나 다른 I/O 오류가 발생하면, IOError 예외가 발생하고, 에러 메시지를 출력합니다.

3. 파일 존재 여부 확인

파일을 열기 전에 파일의 존재 여부를 확인하는 것이 좋습니다. 이를 위해 os 모듈의 path.exists 메서드를 사용할 수 있습니다.

import os

if os.path.exists('example.txt'):
    try:
        with open('example.txt', 'r', encoding='utf-8') as file:
            content = file.read()
            print(content)
    except IOError:
        print("파일을 읽는 동안 오류가 발생했습니다.")
else:
    print("파일이 존재하지 않습니다.")


이 코드는 파일이 존재하는지 확인한 후 파일을 열어 읽습니다. 파일이 없으면, 에러 메시지를 출력합니다.

4. 일반적인 예외 처리

모든 예외 상황을 포괄적으로 처리하고 싶다면, Exception 클래스를 사용할 수 있습니다. 하지만, 이렇게 하면 구체적인 예외 상황을 놓칠 수 있으므로 사용에 주의해야 합니다. 하지만!! 구체적 예외 상황을 처리하지 않아 편하게(!!) 사용할 수 있고 에러메시지를 통해 어떤 상황에서 에러가 발생하는지 확인할 수 있다는 장점이 있습니다.

try:
    with open('example.txt', 'r', encoding='utf-8') as file:
        content = file.read()
        print(content)
except Exception as e:
    print(f"파일을 처리하는 동안 예외가 발생했습니다: {e}")


이 코드는 발생할 수 있는 모든 예외를 처리하고, 예외 메시지를 출력합니다.

5. 예외 발생시키기

필요에 따라 커스텀 예외를 발생시킬 수도 있습니다. 예를 들어, 파일 크기가 너무 큰 경우 예외를 발생시키고 싶을 때 사용할 수 있습니다.

# 커스텀 에러 처리 
class FileTooLargeError(Exception):
    pass

try:
    with open('example.txt', 'r', encoding='utf-8') as file:
        content = file.read()
        if len(content) > 1000:  # 파일 크기 제한 예시
            raise FileTooLargeError("파일이 너무 큽니다.")
        print(content)
except FileTooLargeError as e:
    print(e)
except Exception as e:
    print(f"파일을 처리하는 동안 예외가 발생했습니다: {e}")


이 예제에서는 파일 크기가 1000바이트를 초과하면 FileTooLargeError 예외를 발생시키고, 이를 처리합니다.

결론

파일 처리를 할 때는 항상 예외 상황을 염두에 두고 코드를 작성하는 것이 중요합니다. 파이썬의 예외 처리 기능을 사용하면 파일이 존재하지 않거나 권한이 없을 때, 또는 다른 I/O 오류가 발생했을 때 적절히 대응할 수 있습니다. 위에서 다룬 다양한 예외 처리 방법을 활용하여 안정적인 파일 입출력 코드를 작성해 보세요.

파일을 다루는데 에러가 많이 발생할 수 있습니다. 특히, 파일이 없을 수도 있고 권한 등 예측이 불가능한 에러가 다양하게 발생합니다. 이러한 예외 처리를 해주지 않는다면 프로그램은 수시로 '나 일 안해'하면서 파업 상태에 놓일 수 있습니다. 여러분은 예외 처리 등으로 안전한 프로그램을 만드는 노력을 해주시길 바랍니다.

감사합니다!

반응형