如何从Python 3导入FileNotFoundError?

PSN*_*SNR 17 python exception python-2.7 python-3.x

我目前在一个需要Python 3内置异常的项目中使用Python 2 : FileNotFoundError. 我该怎么做?

aba*_*ert 27

您当然可以定义所需的任何例外.

但他们不会对你有任何帮助.重点FileNotFoundError是任何遇到文件未找到错误的Python操作都会引发该异常.只是定义自己的异常将不会成功.您将获得的是具有适当值的OSError(或IOError,取决于2.x版本)errno.如果您尝试处理自定义FileNotFoundError,您的处理程序将永远不会被调用.

所以,你真正想要的是(例如):

try:
    f = open(path)
except OSError as e:
    if e.errno == errno.ENOENT:
        # do your FileNotFoundError code here
    else:
        raise
Run Code Online (Sandbox Code Playgroud)

  • 似乎[正确异常是IOError](https://docs.python.org/2/library/exceptions.html#exceptions.IOError). (2认同)
  • @Mansour:对于2.6-2.7,两者非常干净.对于旧版本(特别是如果你不使用CPython),这是一个不同的故事(有些东西,比如套接字连接错误,是_neither_).因此"取决于2.x版本".为了安全起见,您可以随时捕获它们,或者(除非您需要回到1.5)它们的公共子类EnvironmentError. (2认同)

Mar*_*oma 8

你可以IOError改用:

当 I/O 操作(例如打印语句、内置 open() 函数或文件对象的方法)因 I/O 相关原因失败时引发,例如“找不到文件”或“磁盘满的”。

此类派生自 EnvironmentError。有关异常实例属性的更多信息,请参阅上面的讨论。

在 2.6 版更改:将 socket.error 更改为将其用作基类。