Python Glossary English

все Python 3Исключенияисключение

OSError

встроенные исключения

Базовый класс для ошибок операционной системы: работа с файлами, сетью, процессами. FileNotFoundError и PermissionError — его подклассы.

Синтаксис

raise OSError(errno, strerror)

Ловить сам OSError стоит скорее как последнюю сетку: он объединяет десятки разных ситуаций, и в except почти всегда точнее назвать конкретный подкласс — FileNotFoundError, PermissionError, IsADirectoryError. Если разбирать нужно именно код ошибки, у объекта есть атрибуты errno, strerror и filename; сравнивайте errno с константами модуля errno, а не с текстом сообщения — он зависит от ОС и локали. Старые имена IOError и EnvironmentError начиная с Python 3.3 — просто синонимы OSError, отдельных классов за ними нет.

Примеры

import errno, os, tempfile
with tempfile.TemporaryDirectory() as d:
    box = os.path.join(d, 'box')
    os.mkdir(box)
    try:
        os.mkdir(box)
    except FileExistsError as e:   # подкласс OSError — ловим точно
        print(e.errno == errno.EEXIST, os.path.basename(e.filename))   # → True box
    try:
        os.remove(os.path.join(d, 'no_file'))
    except OSError as e:   # последняя сетка: причину различает errno, а не текст
        print(type(e).__name__, e.errno == errno.ENOENT)   # → FileNotFoundError True

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности