当前位置: 首页 > 面试题库 >

Python的“ open()”对“找不到文件”引发了不同的错误-如何处理这两个异常?

万嘉石
2023-03-14
问题内容

我有一个脚本,其中提示用户键入文件名(将要打开的文件的文件名),如果当前目录中不存在该文件,则会再次提示用户。这是简短的版本:

file = input("Type filename: ")

...
try:
    fileContent = open(filename, "r")
    ...
except FileNotFoundError:
    ...

当我在Python 3.3x的MacOS X上测试脚本时,当我有意输入错误的文件名时,它可以很好地工作(它在“期望”下执行套件)。

但是,当我想在Python 3.2x的Windows计算机上运行代码时,出现一条错误消息,提示未定义“
FileNotFoundError”。因此,Windows上的Python 3.2认为“ FileNotFoundError”是变量,并且程序因错误退出。

我发现,如果输入文件名无效,则Windows上的Python 3.2会引发“ IOError”。我在Python
2.7的Linux机器上对其进行了测试,它也是IOError。

我的问题是,现在的代码

except "FileNotFoundError":

无法在Windows的Python 3.2上运行,但是如果我将其更改为

except "IOError":

它不再适用于我的Mac。

我该如何解决?我能想到的唯一方法是使用just except,这是我通常不想要的。


问题答案:

在3.3中,IOError成为的别名OSError,并且FileNotFoundError是的子类OSError。所以你可以尝试

except (OSError, IOError) as e:
   ...

这将产生一个相当宽的网络,并且您不能假设未经检查就不会出现“找不到文件”的异常e.errno,但是它可能涵盖了您的用例。

PEP 3151详细讨论了更改的理由。



 类似资料:
  • 问题内容: 为什么list.index会引发异常,而不是使用任意值(例如)?这背后的想法是什么? 对我来说,处理特殊值而不是例外看起来更干净。 编辑 :我没有意识到这是一个潜在的有效值。然而,为什么不别的呢?无值如何? 问题答案: 因为本身就是有效的索引。它可以使用一个不同的值,例如,但在其他情况下(因此)可能没有用,并且仅相当于错误检查,这正是异常处理的目的。

  • 我有一个简单的任务,它创建了一个bat文件,任务名以“server”开头,当执行bat文件时,gradle jobs启动,代码如下: 这个任务曾经工作了一段时间,但现在我开始得到这个错误同步失败:文件找不到StackTrace下面: 我尝试删除项目工作空间中的. gradle文件夹并重新创建它,但它不起作用。重新启动机器和eclipse也没有帮助。 更新:我正在使用gradle 4.5,这似乎是一

  • 我使用的是改型2.0.1。我想处理所有类型的网络错误和异常(如没有网络连接,超时错误,服务器找不到等)我已经找到这个链接。但是其中一些方法在V1.8.0中被否决了。在2.0.1中如何做到这一点?

  • 我发送JSON文件(现在从邮递员)的身体是这样的: 控制器上的方法是: 我犯了个错误- 如何解决这个问题?

  • 问题内容: 即使激活了所有“应用程序开发功能”,我也正在使用“ Internet信息服务7.5”上的AJAX调用来获取JSON文件的“ ERROR 404.3 Not Found”。除JSON文件外,所有其他文件都将被加载。 我在本地计算机上的IIS服务器上运行HTML页面。 如果我直接打开文件,则完全没有问题。当我将文件托管在在线服务器上时,它可以正常工作。 任何快速帮助将不胜感激。 问题答案:

  • 我刚刚开始处理Spring批处理(版本3.0.6)。我有一个工作和内部步骤,我有阅读器->处理器->编写器。 如果读取时未找到文件,我们如何捕获或识别异常。在这种情况下,我想触发电子邮件。