[파이썬] shutil `shutil.rmtree()`의 `onerror` 콜백 사용하기

파이썬 shutil 모듈은 파일 및 디렉토리 작업을 위한 다양한 함수를 제공합니다. 그 중 하나인 shutil.rmtree() 함수는 디렉토리를 재귀적으로 삭제하는 기능을 제공합니다. 하지만 때로는 디렉토리 삭제 중에 오류가 발생할 수 있습니다. 이러한 오류를 처리하기 위해 onerror 콜백 함수를 사용할 수 있습니다.

onerror 콜백은 디렉토리 삭제 중에 발생하는 오류를 처리하는 사용자 정의 함수입니다. 이 콜백 함수는 다양한 오류 유형에 대한 처리 절차를 구현하는 데 사용됩니다. 오류 발생 시 콜백 함수는 오류 유형과 해당 디렉토리의 경로에 대한 정보를 전달받습니다.

아래는 shutil.rmtree()onerror 콜백을 사용하는 예시 코드입니다:

import shutil
import os

def handle_error(func, path, exc_info):
    """
    디렉토리 삭제 중 발생한 오류를 처리하는 콜백 함수
    """
    # 오류 유형을 확인하고 처리 방법을 선택합니다
    if isinstance(exc_info[1], PermissionError):
        # 권한 오류일 경우 예외 처리 로직을 구현합니다
        os.chmod(path, 0o777)  # 예시로 권한을 변경하여 다시 시도합니다
        func(path)  # 다시 삭제를 시도합니다
    else:
        # 다른 유형의 오류일 경우 기본 오류 처리 동작을 수행합니다
        raise exc_info[1]

# 디렉토리 삭제 시 오류 발생 시 `onerror` 콜백 사용
shutil.rmtree('/path/to/directory', onerror=handle_error)

위의 예시 코드에서는 handle_error()라는 사용자 정의 함수를 정의하여 onerror 콜백으로 사용했습니다. 예시로 권한 오류일 경우에는 권한을 변경한 후 다시 삭제를 시도하도록 처리하고, 다른 유형의 오류일 경우에는 기본 오류 처리 동작을 수행합니다.

shutil.rmtree() 함수를 호출할 때 onerror 인자에 사용자 정의 콜백 함수를 넘겨주면 디렉토리 삭제 중에 발생하는 오류를 처리할 수 있습니다. 이를 통해 디렉토리 삭제 시 발생할 수 있는 다양한 오류에 유연하게 대응할 수 있습니다.