gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 02:00:51 24 4
gpt4 key购买 nike

我有以下代码(改编自 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 block 的内部 try/finally block 。我需要一个 except block 吗?调用open()成功后,调用read()会失败吗?我知道 try-except-finally 现在统一了,所以添加一个,至少在语法上,不是问题。

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

此外,如果我不需要 except block ,那我为什么还需要内部 try/finally block ?

最佳答案

我发现 finally block 经常被过度使用。文件关闭(以及其他一些类似的模式)非常重要,Python 3.0 将有一个 with 语句来以一种稍微不那么晦涩的方式覆盖这个基础。

  • 我需要 except 和 finally 吗?

    这触及了这个具体示例的混淆本质,以及他们添加 with 语句的原因。

    finally 执行“无论如何”清理。有无异常(exception),finally 总是被执行。

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

    所有操作系统调用、所有 I/O 调用(几乎所有)都可能引发异常。打开后和阅读前可能会发生各种不好的事情。

  • 如果我添加一个except block ,它会在什么条件下执行?

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

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

    您需要一个模拟文件对象。此对象将响应 open 但会在每次 read 时引发 IOErrorOSError

  • 如果我不需要 except block ,那我为什么还需要内部 try/finally block ?

    清理。无论引发什么异常,finally 都会执行。

试试这个。看看它的作用。

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

关于python - 你如何在 Python 中测试 file.read() 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/374768/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com