【发布时间】:2016-10-28 17:15:56
【问题描述】:
我正在尝试读取一个制表符分隔的文件并收集除控制字符之外的所有字符。如果命中控制字符,则该行的其余部分也应被忽略。
我在 Python 3.5 中尝试了以下代码,使用 for..else loop:
import curses.ascii
input_file = ...
chars = set()
with open(input_file) as file:
for line in file.readlines():
source, target = line.split("\t")
for c in source.strip() + target.strip():
if curses.ascii.iscntrl(c):
print("Control char hit.")
break
chars.add(c)
else:
print("Line contains control character:\n" + line)
continue
print("Line contains no control character:\n" + line.strip())
我希望这会检查每个字符是否为控制字符,如果命中一个(触发break),则跳到下一行,从而触发else/continue 语句。
反而会发生continue 总是被触发,即使if 子句中的break 语句从未到达一行。因此,最终的print 语句也永远不会到达。
我做错了什么?
【问题讨论】:
-
只有在没有触发break时才会触发else。
-
嗯,我建议你阅读更多关于python中
for...else的信息:How can I make sense of theelsestatement in Python loops? -
看看这个是否有帮助 - stackoverflow.com/questions/9979970/…
-
感谢大家,您的提示对您有所帮助。不过,我觉得这个术语有些混乱。
-
如果您尝试将
else与 for 配对,可能会造成混淆。我不认为关键字 else 是这种语法的好选择,但如果你将 else 与 break 配对,你会发现它实际上是有意义的。让我展示一下它在人类语言中是如何工作的。 --for一组嫌疑人中的每个人if任何人都是罪犯break调查。else报告失败。
标签: python python-3.x if-statement for-loop