即使对于print()不在continue块中的某些行也没有打印出任何内容

时间:2018-12-11 07:06:02

标签: python python-3.x continue

我有一个文件~/practice/search_from,看起来像这样:

From i
ssdfadfksjaflkf
asdfasf
adf
sd
fd
fs
sgdggggggggggggsd
gsg
sdg
From j
dasdfewf
sdfas
adsf

我想打印以From开头的行。

所以我在python提示符下做了以下操作:

>>> fhandle=open('practice/search_from')
>>> for line in fhandle:
...    if not line.startswith('From '):
...     continue
...    else:
...     print(line.rstrip())
... 
From i
From j

此代码似乎可以正常工作。

但是,当我放进去

>>> fhandle=open('practice/search_from')
>>> for line in fhandle:
...     line = line.rstrip()
...     if not line.startswith('From:') :
...         continue
...     print(line)
... 

>>> fhandle=open('practice/search_from')
>>> for line in fhandle:
...     line = line.rstrip()
...     if not line.startswith('From:') :
...         continue
...     else:
...         print(line)

什么都不会打印出来。为什么会这样呢?有没有办法解决最后两个代码?

非常感谢您。

2 个答案:

答案 0 :(得分:1)

什么都不会打印出来,因为文件中没有任何行以From:开头。

仅当行以“发件人:”(包括冒号)开头时,

line.startswith('From:')才是True。因此,not line.startswith('From:')在您的文件中将始终为True(没有任何行以From:开头),并且您将始终评估continue行,该行跳至下一个迭代for循环。

答案 1 :(得分:1)

您的代码很好,除非您使用From:搜索。

从您的代码中删除colon(:),它将正常运行:

In [2296]: fhandle=open('practice/search_from')

In [2297]: for line in fhandle:
      ...:     line = line.rstrip()
      ...:     if not line.startswith('From'):
      ...:         continue
      ...:     print(line)
      ...:     
From i
From j