Как импортировать FileNotFoundError из Python 3?

В настоящее время я использую Python 2 для проекта, для которого требуется встроенное исключение Python 3: FileNotFoundError. Как это сделать?

Ответ 1

Вы можете, конечно, определить любые исключения, которые вы хотите.

Но они не собираются делать вам ничего хорошего. Весь смысл FileNotFoundError заключается в том, что любая операция Python, которая запускается в ошибке, не найденной в файле, приведет к возникновению этого исключения. Просто определение вашего собственного исключения не сделает это истинным. Все, что вы получите, это OSError (или IOError, в зависимости от версии 2.x) с соответствующим значением errno. Если вы попытаетесь обработать пользовательский FileNotFoundError, ваш обработчик никогда не получит вызов.

Итак, вы действительно хотите (например):

try:
    f = open(path)
except OSError as e:
    if e.errno == errno.ENOENT:
        # do your FileNotFoundError code here
    else:
        raise

Ответ 2

Вы можете просто создать исключение FileNotFoundError самостоятельно:

class FileNotFoundError(OSError):
    pass

Этот новый класс исключений наследует от OSError так же, как и в Python 3.x.

Вот ссылка на Пользовательские исключения на Python.

Ответ 3

Вместо этого вы можете использовать IOError:

Поднят, когда операция ввода-вывода (например, оператор печати, встроенная функция open() или метод файлового объекта) завершается с ошибкой по причине, связанной с I/O, например, "файл не найден" или "полный диск".

Этот класс получен из среды EnvironmentError. См. Обсуждение выше для получения дополнительной информации об атрибутах экземпляра исключения.

Изменено в версии 2.6: Изменено socket.error, чтобы использовать это как базовый класс.