2016-11-12 2 views
0

У меня есть строка для чтения из файла, бывают случаи, когда readline() вернет пустую строку, и мне нужно проверить это, см. Снимок экрана ниже, и было бы полезно, если кто-нибудь сможет объяснить мне, почему это дает неверный результат:Почему pycharm дает неправильную проверку состояния?

enter image description here

Как видно из скриншота, строки = «\ п», почему результат вычисления Выражение ложно?

Там наверняка есть альтернативный способ проверить пустую строку, но мне просто очень любопытно узнать, почему мой сценарий не работает.

спасибо.

Спасибо.

+0

Если вам нужно протестировать пустую строку, используйте 'line ==" "' not 'line ==" \ n "'. Символ новой строки не является пустой строкой. –

ответ

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)», чтобы увидеть, что на самом деле в нем.

+0

Спасибо. Как вы сказали, первая строка, читаемая внутри, содержит некоторые невидимые символы: 0d0a0d0a, которая на самом деле две пустые строки – PasLeChoix

0

'\n' не является пустой линией. "" есть. Таким образом, вы можете проверить if line == "": или if not line:. И если вы прочитаете из файла, python удалит \n из строки. Поэтому, если он пуст (имеет только новый символ строки), он возвращает пустую строку.

+0

не использовать, на самом деле я использовал 'line ==" "', он просто возвращает неправильный результат – PasLeChoix

+0

@PasLeChoix, тогда покажите нам какой-то код PLS –

+0

f = open ('2014ips.txt') для строки в f: if line == "": continue – PasLeChoix

Смежные вопросы