Python 오류 해결: Python PermissionError 해결하기
저도 처음에 PATH에서 막혔던 것처럼, PermissionError 앞에서도 한참을 당황했던 적이 있습니다. 엑셀 파일을 열어놓은 채로 Python 코드를 실행했다가 "Permission denied"라는 오류가 떠서, 처음에는 코드에 심각한 문제가 있는 줄 알고 몇 시간이나 애먼 곳을 뒤졌던 기억이 있습니다. 알고 보니 문제는 코드가 아니라 그 파일을 다른 프로그램이 이미 붙잡고 있어서 Python이 접근할 수 없었던 아주 단순한 이유였습니다. 이번 글에서는 그때 겪었던 경험을 바탕으로, VS Code에서 Python을 사용할 때 자주 마주치는 PermissionError의 원인과 해결 방법을 정리해보겠습니다.
PermissionError가 발생하는 근본 원인
권한 오류란 무엇인가
PermissionError는 Python 코드가 특정 파일이나 폴더에 접근하려고 했지만, 운영체제 차원에서 그 접근을 허락하지 않았을 때 발생하는 오류입니다. 파일이 존재하지 않아서 생기는 FileNotFoundError와는 성격이 다른데, 이 오류는 파일이 분명히 존재하지만 지금 이 순간 열거나 쓸 수 없는 상태라는 것을 의미합니다.
비유하자면 PermissionError는 마치 회의실 문 앞에 붙어 있는 "사용 중" 표지판과 같습니다. 회의실(파일)은 분명히 존재하고 문도 잠겨 있지 않지만, 이미 누군가 안에서 회의를 하고 있다면 밖에서는 들어갈 수 없습니다. Python도 마찬가지로, 다른 프로그램이나 프로세스가 파일을 붙잡고 있으면 접근 자체를 거부당합니다.
PermissionError가 발생하는 대표적인 상황
- 파일을 다른 프로그램(엑셀, 메모장 등)에서 이미 열어놓은 경우
- 파일이나 폴더에 읽기 전용 속성이 설정되어 있는 경우
- 시스템 보호 폴더에 파일을 쓰려고 시도하는 경우
- 파일 경로를 지정했는데 실제로는 폴더 경로였던 경우
- 백신 프로그램이나 클라우드 동기화 프로그램이 파일을 잠시 점유하고 있는 경우
다른 프로그램의 파일 점유 문제 해결하기
파일이 열려 있는지 확인하기
가장 흔하게 발생하는 상황은 Python으로 수정하려는 파일을 다른 프로그램에서 이미 열어놓은 경우입니다. 특히 엑셀이나 워드 파일을 다루는 스크립트를 작성할 때 이런 실수가 잦은데, 파일을 열어둔 채로 저장을 시도하면 다음과 같은 오류가 발생합니다.
with open('report.xlsx', 'w') as f:
f.write('데이터')
PermissionError: [Errno 13] Permission denied: 'report.xlsx'
이 오류가 발생했다면 가장 먼저 해당 파일을 열어놓은 다른 프로그램이 있는지 확인하고, 있다면 닫은 뒤 다시 실행해보는 것이 첫 번째 해결책입니다.
예외 처리로 안정적으로 대응하기
사용자가 파일을 실수로 열어둔 상태에서 스크립트가 실행될 가능성이 있다면, 예외 처리를 통해 프로그램이 갑자기 멈추지 않고 안내 메시지를 보여주도록 만드는 것이 좋습니다.
try:
with open('report.xlsx', 'w') as f:
f.write('데이터')
except PermissionError:
print("파일이 다른 프로그램에서 열려 있습니다. 파일을 닫고 다시 시도해주세요.")
파일 및 폴더 접근 권한 문제 해결하기
읽기 전용 속성 확인하기
파일 자체에 읽기 전용 속성이 설정되어 있으면 쓰기 작업이 거부됩니다. Windows에서는 파일을 마우스 오른쪽 버튼으로 클릭하고 속성을 확인하면 이 설정을 볼 수 있습니다.
Python 코드에서 파일 속성을 직접 확인하고 필요하다면 변경하는 것도 가능합니다.
import os
import stat
file_path = 'report.xlsx'
# 파일에 쓰기 권한 부여
os.chmod(file_path, stat.S_IWRITE)
시스템 보호 폴더 접근 문제
C:\Windows나 C:\Program Files처럼 운영체제가 보호하고 있는 폴더에 파일을 쓰려고 하면 관리자 권한이 없는 이상 접근이 거부됩니다. 이런 폴더에 파일을 저장해야 하는 상황이라면, 애초에 사용자가 자유롭게 쓸 수 있는 폴더(문서 폴더나 사용자 홈 디렉터리)로 저장 위치를 변경하는 것이 더 근본적인 해결책입니다.
import os
home_dir = os.path.expanduser('~')
file_path = os.path.join(home_dir, 'Documents', 'report.xlsx')
경로 지정 실수로 인한 오류 해결하기
폴더 경로를 파일 경로로 착각한 경우
의외로 자주 발생하는 원인 중 하나는 실제로는 폴더인 경로를 파일 경로로 착각하고 open() 함수에 전달하는 경우입니다. 이 경우에도 운영체제는 접근을 거부하며 PermissionError를 발생시킵니다.
import os
path = 'my_folder' # 실제로는 폴더
if os.path.isdir(path):
print("이 경로는 폴더입니다. 파일 경로를 다시 확인해주세요.")
else:
with open(path, 'r') as f:
print(f.read())
경로를 다루기 전에 이렇게 os.path.isdir()이나 os.path.isfile()로 미리 확인하는 습관을 들이면 비슷한 실수를 예방할 수 있습니다.
백신 및 동기화 프로그램과의 충돌
가끔은 코드에 아무런 문제가 없는데도 백신 프로그램이나 원드라이브 같은 클라우드 동기화 프로그램이 파일을 순간적으로 점유하면서 오류가 발생하기도 합니다. 이런 경우에는 파일을 잠시 후 다시 시도하도록 재시도 로직을 넣어주는 방법이 효과적입니다.
import time
for attempt in range(3):
try:
with open('report.xlsx', 'w') as f:
f.write('데이터')
print("저장 완료!")
break
except PermissionError:
print(f"{attempt + 1}번째 시도 실패, 잠시 후 재시도합니다.")
time.sleep(2)
마무리
지금까지 VS Code에서 Python을 사용할 때 발생하는 PermissionError의 원인과 해결 방법을 정리해봤습니다. 이 오류는 코드의 논리적 오류가 아니라 파일 점유나 권한 설정이라는 외부 요인에서 비롯되는 경우가 많으므로, 오류 메시지만 보고 코드를 뜯어고치기보다는 파일 상태부터 차근차근 점검하는 습관이 중요합니다.
핵심 내용을 정리하면 다음과 같습니다.
- PermissionError는 파일이 없어서가 아니라 접근이 거부되어 발생하는 오류입니다
- 파일을 다른 프로그램에서 열어놓은 상태라면 먼저 닫고 다시 시도해야 합니다
- 읽기 전용 속성이나 시스템 보호 폴더 접근도 흔한 원인 중 하나입니다
- 폴더 경로를 파일 경로로 착각하지 않았는지
os.path.isdir()로 확인하는 것이 좋습니다 - 재시도 로직을 추가하면 일시적인 파일 점유 문제에 유연하게 대응할 수 있습니다
다음 글에서는 Python에서 파일과 폴더를 다룰 때 함께 자주 발생하는 IsADirectoryError와 같은 관련 오류들을 더 자세히 다뤄보도록 하겠습니다.
댓글
댓글 쓰기