gpt4 book ai didi

python - 为什么 Python 在查找和读取超过文件末尾时不会引发异常?

转载 作者:太空宇宙 更新时间:2023-11-04 00:55:58 25 4
gpt4 key购买 nike

我正在编写单元测试,看看如果我的代码正在查找和读取以只读和二进制模式(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,其中行为仍然相同。

最佳答案

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

关于python - 为什么 Python 在查找和读取超过文件末尾时不会引发异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35115127/

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