Python 3.3+Исключенияисключение
PermissionError
встроенные исключения
Вызывается при попытке выполнить операцию без необходимых прав доступа к файлу или ресурсу.
Синтаксис
raise PermissionError('нет доступа')
Подкласс OSError, который прилетает в момент самой операции (open, os.remove, запись), а не заранее — поэтому проверять права через os.access до открытия и бесполезно, и опасно: между проверкой и открытием всё может измениться, надёжнее обернуть в try сам вызов. На Windows тот же PermissionError встречается в неожиданных местах: при open() каталога и при попытке удалить или переименовать файл, который держит открытым другая программа.
Примеры
import os
import tempfile
from pathlib import Path
# Права — свойство ОС И пользователя. Под администратором (а в контейнере
# процесс часто идёт от root) запись разрешена даже в файл «только для чтения»,
# поэтому ожидания здесь помечены средозависимыми: карточка показывает ФОРМУ
# обработки, а не гарантированный исход. Прежний пример читал '/etc/shadow' —
# файла с таким именем нет ни на Windows, ни на macOS.
path = Path(tempfile.mkdtemp()) / 'readonly.txt'
path.write_text('данные', encoding='utf-8')
os.chmod(path, 0o444)
try:
with open(path, 'w', encoding='utf-8') as f:
f.write('перезапись')
print('запись разрешена — у процесса права администратора') # → ?
except PermissionError:
print('нет прав на запись') # → ?
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности