如何正确引发FileNotFoundError?

时间:2016-03-18 06:06:01

标签: python python-3.x file-not-found

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

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

这比文件无&#34;中的&#34;语法错误更好,但如何提升&#34;真实&#34;带有正确消息的python异常,而不必重新实现它?

1 个答案:

答案 0 :(得分:50)

传递参数:

import errno
import os

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

FileNotFoundErrordocs的子类,它带有几个参数。第一个是来自OSError的错误代码(找不到文件总是errno.ENOENT),第二个是错误消息(使用errno module获取此错误消息),并传入文件名作为第三

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

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