为什么Python在搜索和读取文件末尾时不会引发异常?

时间:2016-01-31 14:47:49

标签: python file python-3.x

我正在编写单元测试,看看如果我的代码正在寻找并读取以只读和二进制模式(rb模式)打开的二进制文件的末尾会发生什么。

我很确定在这种情况下会引发异常,但它不是(在Python 3.x上测试):

>>> fname = r"c:\tmp\test.bin"
>>> os.path.getsize(fname)
60
>>> f = open(fname, "rb")
>>> f.seek(100)
100
>>> f.tell()
100
>>> f.read()
b''
>>>

问题:

  • 为什么允许这种行为(从C继承?)?我理解写入模式下文件的行为,但不是只读模式。
  • 读取文件末尾是否被视为未定义的行为?它总是返回空bytes吗?它是实现定义的吗?

修改:将模式从r+b更改为rb,其行为仍然相同。

1 个答案:

答案 0 :(得分:3)

您的问题询问了读取模式,但您的代码演示了读写模式。寻找可写文件的结尾并不是错误,因为执行后续写入将导致支持它的文件系统上的sparse file(并且在文件系统的新写入之前进行零填充,直到写入文件系统为止。吨)。