为什么pycharm给出错误的条件检查?

时间:2016-11-12 22:44:27

标签: python

我有一个要从文件中读取的字符串,有些情况下readline()将返回一个空白行,我需要检查一下,请参阅下面的屏幕截图,如果有人可以向我解释,将不胜感激为什么它会给出错误的结果:

enter image description here

从屏幕截图中可以看到,line ='\ n',为什么表达式的评估结果为False?

肯定是检查空白行的替代方法,但我只是非常奇怪地想知道为什么我的这个脚本不起作用。

谢谢。

感谢。

2 个答案:

答案 0 :(得分:1)

您的输入文件很可能包含一些令人讨厌的字符,例如"zero width space""invisible separator"。如果您打印(或评估)repr(line)

,则可以输出这些内容
with open('data.txt', 'w') as f:
    f.write(u"\n")
    f.write(u"\u200B\n")  # zero width space
    f.write(u"\u2063\n")  # invisible separator
    f.write(u"\n")


with open('data.txt', 'r') as f:
    for line in f:
        print(repr(line))

如果您调试上述内容,您将能够复制第2行和第3行的行为,但不能复制第1行和第4行。请注意,这些字符在大多数字体中都不可见(它们不会占用任何空间! ),简单地打印/显示它们(就像调试器中的悬停一样)将不会显示它们甚至在那里。

在PyCharm的“评估表达式”对话框中,简单评估“repr(line)”以查看其中的真实内容。

答案 1 :(得分:0)

'\n'不是空行。 ""是。因此,您可以查看if line == "":if not line:。如果您从文件中读取python将从行中删除\n。因此,如果它是空的(只有新行字符),它将返回一个空字符串。