以"rock&roll"模式打开文件



我想知道文件open()模式验证(Python2.7)发生了什么:

>>> with open('input.txt', 'illegal') as f:
...     for line in f:
...         print line
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: mode string must begin with one of 'r', 'w', 'a' or 'U', not 'illegal'
>>> with open('input.txt', 'rock&roll') as f:
...     for line in f:
...         print line
... 
1
2
3

所以,我不能在illegal模式下打开文件,但我可以在rock&roll模式下打开它。在这种情况下,实际用于打开文件的模式是什么?

注意,在python3上,我不能同时使用illegalrock&roll:

>>> with open('input.txt', 'rock&roll') as f:
...     for line in f:
...         print(line)
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid mode: 'rock&roll'
>>> with open('input.txt', 'illegal') as f:
...     for line in f:
...         print(line)
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid mode: 'illegal'

这令人困惑,为什么python3.x的行为不同?

Python 2.x open函数本质上将其工作委托给C库fopen函数。在我的系统上,fopen的文档包含:

参数mode指向一个以以下序列之一开头的字符串(这些序列后面可能会有其他字符):

您的ock&roll被视为"附加字符"。

在Python3中,允许的打开模式受到更多限制(本质上,只允许有效的字符串)。

前面的回溯很好地解释了这一点:

ValueError:模式字符串必须以"r"、"w"、"a"或"U"之一开始

"摇滚乐"以"r"开头,所以它显然是合法的。

相关内容

  • 没有找到相关文章

最新更新