当前位置:  开发笔记 > 编程语言 > 正文

如何在Python中测试file.read()错误?

如何解决《如何在Python中测试file.read()错误?》经验,为你挑选了1个好方法。

我有以下代码(改编自Dive Into Python中给出的示例),它将文件的全部内容读入缓冲区.

buffer = ""

try:
    file = open(postFileName, 'rU')
    try:
        # Read the entire POST log file into a buffer
        buffer += file.read()
    finally:
        file.close()
except IOError:
    buffer += "The POST file could not be opened."

关于这段代码困扰我的是没有except块的内部try/finally块.我需要一个除了块吗?呼叫成功read()后呼叫是否会失败open()?我知道try-except-finally现在是统一的,所以添加一个,至少在语法上,不是问题.

如果我添加一个except块,它将在什么条件下执行,以及如何编写测试以确保它在这些条件下运行?

此外,如果我没有需要一个除块,那么为什么还需要内try/finally块呢?



1> S.Lott..:

我发现最后块经常被过度使用.文件关闭(以及一些其他类似的模式)非常重要,以至于Python 3.0将使用with语句来覆盖这个基础,而不是那么模糊.

我最后需要一个除外吗?

这取决于这个具体例子的混乱性质,以及为什么他们添加了with语句.

最后做"不管是什么"的清理工作.异常或无异常,最终总是执行.

在调用open()成功后,对read()的调用是否会失败?

所有OS调用,所有I/O调用(几乎所有内容)都可能引发异常.打开之后和阅读之前都会发生各种不好的事情.

如果我添加一个except块,它将在什么条件下执行?

阅读文件.打开和读取之间可能会发生许多愚蠢的I/O错误.另外,请阅读内置异常. https://docs.python.org/2/library/exceptions.html

如何编写测试以确保它在这些条件下运行?

你需要一个模拟文件对象.这个对象会响应,open但会引发一个IOErrorOSError每个read.

如果我不需要一个except块,那为什么我需要内部的try/finally块呢?

清理.该最终将不管是什么引发异常执行.

试试这个.看看它做了什么.

try:
 raise OSError("hi mom")
finally:
 print "Hmmm"

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有