Как правильно создать FileNotFoundError?
Я использую стороннюю библиотеку, которая отлично подходит, но не обрабатывает неубедительные файлы так, как мне хотелось бы. Когда вы даете ему несуществующий файл, вместо того, чтобы поднимать старый добрый
FileNotFoundError: [Errno 2] No such file or directory: 'nothing.txt'
возникает некоторое неясное сообщение:
OSError: Syntax error in file None (line 1)
Я не хочу обрабатывать недостающий файл, не хочу улавливать и обрабатывать исключение, не хочу поднимать настраиваемое исключение, не хочу, чтобы я был open
, и не создавал его, если он не существует.
Я хочу только проверить его (os.path.isfile(filename)
выполнит трюк), а если нет, то просто поднимите файл FileNotFoundError.
Я пробовал это:
#!/usr/bin/env python3
import os
if not os.path.isfile("nothing.txt"):
raise FileNotFoundError
какие только выходы:
Traceback (most recent call last):
File "./test_script.py", line 6, in <module>
raise FileNotFoundError
FileNotFoundError
Это лучше, чем "Синтаксическая ошибка в файле None", но как можно поднять "реальное" исключение python с правильным сообщением, не переустраивая его?
Ответы
Ответ 1
Передать аргументы:
import errno
import os
raise FileNotFoundError(
errno.ENOENT, os.strerror(errno.ENOENT), filename)
FileNotFoundError
является подклассом OSError
, который принимает несколько аргументов. Первый - это код ошибки из errno
module (файл не найден всегда errno.ENOENT
), второй - сообщение об ошибке (используйте os.strerror()
, чтобы получить это) и передать имя файла как третье.
Окончательное строковое представление, используемое в трассировке, построено из этих аргументов:
>>> print(FileNotFoundError(errno.ENOENT, os.strerror(errno.ENOENT), 'foobar'))
[Errno 2] No such file or directory: 'foobar'