当“try ..除了IOError”没有捕获它时,如何处理FileNotFoundError?

时间:2015-02-20 16:21:19

标签: python exception python-3.x try-catch

如何在python 3上捕获错误?我已经google了很多,但没有一个答案似乎有效。 open.txt文件不存在,因此应该打印e.errno。

这就是我现在尝试的:

这是我定义的功能

try:
    with open(file, 'r') as file:
        file = file.read()
        return file.encode('UTF-8')
except OSError as e:
    print(e.errno)

但是当我收到此错误时,我没有打印任何内容

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

1 个答案:

答案 0 :(得分:27)

FileNotFoundErrorOSError的子类,捕获该异常本身:

except OSError as e:

操作系统异常已在Python 3.3中重新编写; IOError已合并到OSError。请参阅“新功能文档”中的PEP 3151: Reworking the OS and IO exception hierarchy section

有关详细信息OS Exceptions section以获取更多信息,请向下滚动查看类层次结构。

也就是说,您的代码仍应正常工作,因为IOError现在是OSError的别名:

>>> IOError
<class 'OSError'>

确保将异常处理程序放在正确的位置。仔细查看异常的追溯,确保您没有错过它实际被引发的位置。最后但同样重要的是,你确实重启了你的Python脚本,对吧?