2012-03-01 4 views
1

Я прочитал файл, который содержит только одну строку. Однако я не могу перестать читать файл до конца цикла. т.е. питон не генерирует исключение EOFError. что не так с моим кодом?не может поймать python EOFError

for x in range(5): 
    try: 
    line = file.readlines() 
    except EOFError: 
    break 
    print "Line:",line 

Выход:

Line: ['nice\n'] 
Line: [] 
Line: [] 
Line: [] 
Line: [] 
+1

Почему делают у вас есть петля? 'x' никогда не используется. –

+0

Что вы ** действительно ** пытаетесь сделать? –

+0

@Tichodroma Я забираю программу, такую ​​как голова, которая может читать имя файла и количество строк, которые вы хотите видеть. Однако даже файл содержит только одну строку, однако, если я не хочу видеть первые 10 строк файла, программа напечатает 9 пустых строк. Я просто хочу, чтобы он печатал одну строку. этот код - всего лишь фрагмент моей программы, имитирующий, чтобы увидеть 5 строк – remy

ответ

6

readlines() читает весь документ и возвращает список строк, а не только одну строку.

Возможно, вы использовали file.readline() - но даже это не вызывает ошибки, поэтому вам нужно сделать что-то еще, например, проверить if not line.endswith("\n"): break или len(line) < 1, чтобы обнаружить EOF.

Лично я хотел бы написать такую ​​же функциональность что-то вроде:

with open("filename") as f: 
    for i, line in enumerate(f): 
     print("Line: %s" % line) 
     if i > 5 or not line: 
      break 

Или, если вы хотите избавиться от лишних символов новой строки, не изменить оператор печати на:

print("Line: %s" % line.rstrip("\n")) 
+1

'file.readline()' не гарантирует, что строка закончится с '\ n'. –

+0

До сих пор я просто знаю, что readline не выбросит EOFError. Огромное спасибо. – remy

+0

@ Игнасио Васкес-Абрамс: действительно? Справка говорит «Сохранить новую строку». - В любом случае я добавил предложение проверить 'len (line)' перед вашим комментарием. – Kimvais

2

file.readlines()никогда поднимает EOFError.

1

из докторов он говорит, что чтение файла возвращает пустую строку в EOF во время ввода() и raw_input() возвратит EOFError когда EOF достигается без чтения каких-либо данных

http://docs.python.org/library/exceptions.html#exceptions.EOFError

+0

Я знаю, в чем моя вина. Спасибо большое – remy

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