在Python中读取文件进入无限循环
我有一个包含以下内容的文件:在Python中读取文件进入无限循环,python,Python,我有一个包含以下内容的文件: a b c d 我使用以下代码在Python中阅读这篇文章: f = open('foo.txt') w = f.readline() while w is not '' : print w w = f.readline() 根据 如果f.readline()返回空字符串,则表示已到达文件末尾 那么为什么我要进入无限循环?操作符测试两个引用是否引用了完全相同的对象。在本例中,如您所述,您需要进行相等性检查 发生无限循环是因为尽管它返回了',
a
b
c
d
我使用以下代码在Python中阅读这篇文章:
f = open('foo.txt')
w = f.readline()
while w is not '' :
print w
w = f.readline()
根据
如果f.readline()返回空字符串,则表示已到达文件末尾
那么为什么我要进入无限循环?操作符测试两个引用是否引用了完全相同的对象。在本例中,如您所述,您需要进行相等性检查 发生无限循环是因为尽管它返回了
'
,但它是str
的一个不同实例。不同的实例,但值相同
Python可能会也可能不会选择作为优化来恢复现有的
str
对象(毕竟它们是不可变的)。但是,一般情况下,您不应该依赖这种行为,除非文档中特别提到(例如,None
,因为它是NoneType
的唯一实例)。如果两个引用引用引用了完全相同的对象,则是
操作符测试。在本例中,如您所述,您需要进行相等性检查
发生无限循环是因为尽管它返回了'
,但它是str
的一个不同实例。不同的实例,但值相同
Python可能会也可能不会选择作为优化来恢复现有的str
对象(毕竟它们是不可变的)。但是,一般情况下,您不应该依赖于这种行为,除非文档中特别提到其他行为(例如,None
,因为它是NoneType
的唯一实例)。这很有趣
如果你更换
而w是“
与
而w!=''
代码将成功运行
这意味着readline()返回空字符串的新实例,而不是返回执行时得到的全局实例
s = ''
t = ''
assert s is t
这很有趣
如果你更换
而w是“
与
而w!=''
代码将成功运行
这意味着readline()返回空字符串的新实例,而不是返回执行时得到的全局实例
s = ''
t = ''
assert s is t
试试这个
f = open('foo.txt')
while 1:
line = f.readline()
if not line:
break
print line
试试这个
f = open('foo.txt')
while 1:
line = f.readline()
if not line:
break
print line
在处理文件对象时,最好使用with关键字。这样做的好处是,即使在执行过程中引发异常,文件也会在其套件完成后正确关闭。它也比编写等效的try-finally块短得多
请参阅此链接:
在处理文件对象时,最好使用with关键字。这样做的好处是,即使在执行过程中引发异常,文件也会在其套件完成后正确关闭。它也比编写等效的try-finally块短得多
请参阅此链接:我解决了问题。将while条件更改为
w!=''代码>使其工作正常。我仍然想知道为什么不是
导致无限循环。我不会用那个代码进入无限循环。埃里克,这很有趣。我在Ubuntu 12.10/12.04和Python 2.7.3上运行了一个无限循环。我在两个不同的系统上尝试了这个方法,并且能够重现这个问题;我使用的是Windows7(Py2.7)。也许某些优化正在使它们成为同一个对象。当w不是“”时不要写:
,只要在w:
时写,我就解决了问题。将while条件更改为w!=''代码>使其工作正常。我仍然想知道为什么不是
导致无限循环。我不会用那个代码进入无限循环。埃里克,这很有趣。我在Ubuntu 12.10/12.04和Python 2.7.3上运行了一个无限循环。我在两个不同的系统上尝试了这个方法,并且能够重现这个问题;我使用的是Windows7(Py2.7)。也许某些优化正在使它们成为同一个对象。当w不是“”时不要写:
,当w: