考虑以下代码:
try:
f = open("myfile2.dat", "rb")
except IOError:
f = open("myfile2.dat", "ab+")
print(f.mode)
f.close()
如果在我运行此代码时 myfile2.dat 不存在,空闲时会使用 rb+ 而不是 ab+ 打开一个新文件,为什么?
最佳答案
您正在以追加 + 写入模式打开一个新文件。因为没有要附加到 的文件,所以您会得到一个处于读 + 写模式的文件。
这本质上是同一件事。这里没有问题,您仍然可以读取和写入文件。
在幕后,文件仍然以附加模式打开,但是 .mode
属性提供了一个更简单的文件 View ;它只会报告您现在可以对文件执行的操作,而不是您打开文件时发生的情况。它仅显示您是否可以读取或写入文件以及文件是否以独占方式打开(x
模式)。
参见 C code for the .mode
attribute .
更新:是的,这令人困惑,而且确实是一个错误。 path to fix this discrepancy最近已合并到 Python 中,当新版本的 Python 2.7、3.3 和 3.4 出现时,文件对象的 .mode
属性将更好地反射(reflect)用于打开文件的原始模式字符串。
关于python - 为什么我不能指定文件的打开方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15559257/