如何正确引发 FileNotFoundError?

How do I raise a FileNotFoundError properly?

我使用的第三方库很好,但无法按照我希望的方式处理不存在的文件。当给它一个不存在的文件时,而不是提高旧的

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

这比 "Syntax error in file None" 更好,但是如何使用正确的消息引发 "real" python 异常,而不必重新实现它?

传入参数:

import errno
import os

raise FileNotFoundError(
    errno.ENOENT, os.strerror(errno.ENOENT), filename)

FileNotFoundErrorOSError, which takes several arguments. The first is an error code from the errno module (file not found is always errno.ENOENT), the second the error message (use os.strerror()的子类得到这个),传入文件名作为3rd.

回溯中使用的最终字符串表示是根据这些参数构建的:

>>> print(FileNotFoundError(errno.ENOENT, os.strerror(errno.ENOENT), 'foobar'))
[Errno 2] No such file or directory: 'foobar'