파이썬의 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()
함수를 더욱 유연하고 안전하게 사용할 수 있습니다.