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

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。

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

最佳答案

在3.3中, IOError became an alias for OSError FileNotFoundErrorOSError的子类。所以你可以尝试

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

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

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

10-07 12:34
查看更多