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