Python Glossary English

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Сообщить о неточности