请考虑以下代码:
try:
f = open("myfile2.dat", "rb")
except IOError:
f = open("myfile2.dat", "ab+")
print(f.mode)
f.close()
如果myfile2.dat在运行此代码时不存在,则Idle打开一个rb +而不是ab +的新文件,为什么?
答案 0 :(得分:4)
您正在追加+写入模式中打开新文件。因为没有文件可以将附加到,所以你会得到一个处于读写模式的文件。
这基本上是同样的事情。这里没有问题,你仍然可以从和中读取文件。
在幕后,文件仍以追加模式打开,但.mode
属性提供了更简单的文件视图;它只会报告你可以用文件现在做什么,而不是你打开文件时发生的事情。它仅显示您是否可以读取或写入文件以及文件是否已打开以进行独占创建(x
模式)。
请参阅C code for the .mode
attribute。
更新:是的,这很令人困惑,而且确实是一个错误。 path to fix this discrepancy最近已合并到Python中,当Python 2.7,3.3和3.4的新版本出来时,文件对象'.mode
属性将更好地反映用于打开文件的原始模式字符串。
答案 1 :(得分:0)
编辑:忽略这一点,这是在Python 2.x上完成的,我在原始问题中没有看到#python-3.x标记。
它为我打开了ab +:
>>> try:
... f = open("myfile2.dat", "rb")
... except IOError:
... f = open("myfile2.dat", "ab+")
...
>>> print(f.mode)
ab+
这是在Mac上运行Jython。