我使用第三方库,这很好,但不能以我希望的方式处理不存在的文件.当给它一个不存在的文件,而不是提高旧的好

FileNotFoundError: [Errno 2] No such file or directory: 'nothing.txt'

这引发了一些模糊的信息:

OSError: Syntax error in file None (line 1)

我不想处理丢失的文件,不想捕获或处理异常,不想引发自定义异常,也不想删除该文件,如果它不存在,也不想创建它.

我只想判断它是否存在(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

这比"无文件中的语法错误"要好,但如何在不必重新实现的情况下,用正确的消息引发"真正的"python异常呢?

推荐答案

传入参数:

import errno
import os

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

FileNotFoundErrorOSError的一个子类,需要几个参数.第一个是errno module中的错误代码(未找到的文件始终是errno.ENOENT),第二个是错误消息(使用os.strerror()获取),并将文件名作为第三个文件传递.

回溯中使用的最后一个字符串表示形式是根据以下参数构建的:

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

Python-3.x相关问答推荐

在BaseHTTPRequestHandler中填充和返回列表

Python - 根据条件附加 NULL 值

命名空间前缀无效

ImportError:抓取数据后找不到 html5lib

通过匹配第一列的行值,逐个单元格地添加两个Pandas 数据框中的浮点数

Pandas 窗口聚合两个排序表

为什么 mypy 不适用于 sqlalchemy?

裁剪复数以解决 exp 中的溢出错误

python2和python3中的列表生成器

如何将元组列表拆分为两个单独的列表?

python total_ordering:为什么使用 __lt__ 和 __eq__ 而不是 __le__?

具有两个或多个返回参数的函数注释

所有 Python dunder 方法的列表 - 您需要实现哪些方法才能正确代理对象?

通过多个键对字典列表进行分组和聚合

python 内置的 __exit__ 参数类型是什么?

如何模拟 open(...).write() 而不会出现没有这样的文件或目录错误?

Pyodbc:登录超时错误

在 Python 3 中调用 super() 的 4 种方法中的哪一种?

如何在 Python 3.2 中退出?

如何阻止散景在 Jupyter Notebook 中打开新标签?