[파이썬] shutil `shutil.rmtree()`와 디렉토리 삭제 오류 처리하기

파이썬을 사용하여 디렉토리를 삭제하려고 할 때, shutil 모듈의 shutil.rmtree() 함수는 매우 편리한 기능을 제공합니다. 그러나 때로는 디렉토리 삭제를 시도하면 오류가 발생할 수도 있습니다. 이러한 오류에 대한 처리 방법을 알아보겠습니다.

shutil.rmtree() 함수 소개

shutil.rmtree() 함수는 주어진 경로를 재귀적으로 탐색하여 디렉토리와 해당 디렉토리에 포함된 모든 파일을 삭제합니다. 이 함수는 특히 큰 디렉토리를 삭제해야 할 때 유용합니다.

shutil.rmtree(path, ignore_errors=False, onerror=None)

디렉토리 삭제 오류 처리하기

디렉토리를 삭제하는 과정에서 다양한 오류가 발생할 수 있습니다. 예를 들어, 디렉토리에 접근할 수 없는 권한이 있거나, 삭제하려는 파일이 열려 있는 경우 등의 상황에서 오류가 발생할 수 있습니다. 이러한 경우에는 shutil.rmtree() 함수의 ignore_errors 매개변수를 True로 설정하여 오류를 무시할 수 있습니다.

import shutil

try:
    shutil.rmtree('/path/to/directory', ignore_errors=True)
except OSError as e:
    print("디렉토리 삭제 오류:", e)

위의 예제에서는 shutil.rmtree() 함수를 실행하고, 오류가 발생하면 OSError 예외가 발생합니다. 이 예외가 발생할 경우, 오류 메시지를 출력하여 디렉토리 삭제 오류를 알릴 수 있습니다.

또한, onerror 매개변수에 함수를 전달하여 별도의 오류 처리 동작을 정의할 수도 있습니다. 예를 들어, 삭제할 수 없는 파일을 만나면 해당 파일을 출력하고 건너뛰도록 정의할 수 있습니다.

import shutil

def handle_errors(func, path, exc_info):
    print("오류를 처리합니다:", func, path)

shutil.rmtree('/path/to/directory', onerror=handle_errors)

위의 예제에서는 handle_errors() 함수를 정의하여 삭제할 수 없는 파일이 발생했을 때 오류 메시지를 출력합니다. 이 함수는 shutil.rmtree() 함수가 호출될 때마다 호출됩니다.

마무리

shutil.rmtree() 함수를 사용하면 파이썬에서 디렉토리를 손쉽게 삭제할 수 있습니다. 그러나 디렉토리 삭제 중에 발생할 수 있는 오류에 대해 적절한 처리를 해주어야 합니다. ignore_errors 매개변수를 사용하거나, onerror 매개변수를 통해 오류를 처리함으로써 안정성을 높일 수 있습니다.

그러므로, 디렉토리를 삭제할 때는 모든 상황에 대비하여 오류 처리를 신중하게 고려해야 합니다.