繁体   English   中英

如何正确引发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

这比“文件无”中的语法错误更好,但是如何用适当的消息引发“真实的” python异常,而不必重新实现它?

传递参数:

import errno
import os

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

FileNotFoundErrorOSError的子OSError ,它带有几个参数。 第一个是来自errno模块的错误代码(找不到的文件始终是errno.ENOENT ),第二个是错误消息(使用os.strerror()获得此信息),并将文件名作为第3个传递。

追溯中使用的最终字符串表示形式是根据以下参数构建的:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM