[파이썬] shutil 디렉토리 복사 중 사용자 정의 오류 처리하기

파이썬의 shutil 모듈은 파일 및 디렉토리 작업을 수행하기 위한 유용한 함수들을 제공합니다. 그 중 하나는 shutil.copytree() 함수이며, 이 함수는 디렉토리를 복사하는 데 사용됩니다. 디렉토리 복사 작업 중에는 다양한 오류가 발생할 수 있으며, 이러한 오류들을 사용자 정의로 처리하는 방법에 대해 알아보겠습니다.

오류 처리 기본 개념

디렉토리 복사 작업이 실패할 때, shutil.copytree() 함수는 shutil.Error 예외를 발생시킵니다. 이 예외는 args 속성을 통해 내부적으로 복사 작업 중 발생한 예외 목록을 가지고 있습니다.

이러한 내부 예외 목록을 확인하고 사용자 정의로 처리하기 위해서는 오류 처리 블록을 사용해야 합니다. 오류 처리 블록은 try-except 문으로 구성되며, shutil.Error 예외를 처리하는 코드를 포함해야 합니다.

사용자 정의 오류 처리하는 예제

다음은 shutil.copytree() 함수를 사용하여 디렉토리를 복사하는 동안 예외를 처리하는 예제입니다. 복사 작업 중에 발생한 각 예외에 대해 사용자 정의 메시지를 출력하고, 복사 작업을 계속할지 여부를 사용자에게 묻는 코드입니다.

import shutil

def copy_directory(src, dst):
    try:
        shutil.copytree(src, dst)
    except shutil.Error as e:
        print("디렉토리 복사 중 오류 발생:")
        for src, dst, error_msg in e.args[0]:
            print(f"  - {error_msg}")
            
            # 복사 작업을 계속할지 여부를 묻기
            response = input("계속 복사 작업을 진행하시겠습니까? (y/n): ")
            if response.lower() != 'y':
                break
    except Exception as e:
        print("예기치 못한 오류 발생:", e)

이 예제에서는 shutil.copytree() 함수를 try문으로 감싸고, shutil.Error 예외를 처리하도록 합니다. 오류 예외가 발생하면, args[0]로부터 내부 예외 목록을 가져와서 각 예외의 메시지를 출력합니다.

또한, 사용자에게 복사 작업을 계속할지 여부를 묻고, 사용자가 ‘n’을 입력하면 복사 작업을 중지합니다.

사용 예시

위 예제를 사용하여 디렉토리 복사 작업 중에 오류를 처리하는 방법을 알아보겠습니다.

src = "/path/to/source/directory"
dst = "/path/to/destination/directory"

copy_directory(src, dst)

위 코드는 /path/to/source/directory에 있는 디렉토리를 /path/to/destination/directory로 복사합니다. 예외가 발생하는 경우, 사용자에게 계속 복사 작업을 진행할지 묻습니다.

이렇게 함으로써 사용자 정의 오류 처리를 통해 shutil.copytree() 함수를 더욱 유연하고 안전하게 사용할 수 있습니다.