EOFError: EOF when reading a line при input() — что значит и почему?
Программа с input() запускается на сайте/в онлайн-тренажёре и сразу падает с EOFError: EOF when reading a line. Локально всё работает! Что значит EOFError при input и как это исправить?
1 ответ
EOFError: EOF when reading a line значит: input() попытался прочитать строку, а ввода больше нет (EOF — «конец файла/потока ввода»). Программа ждёт данные, но их неоткуда взять.
Главные причины:
- Вызвали
input()больше раз, чем подали строк. Частая ситуация в онлайн-тренажёрах и при автоматической проверке: на вход подали, скажем, 2 строки, а в коде триinput()— третий падает с EOFError.
a = input()
b = input()
c = input() # если подали только 2 строки — EOFError
-
Среда вообще не передаёт ввод. Некоторые онлайн-песочницы и ноутбуки не поддерживают интерактивный
input()— поток ввода пуст, и первый жеinput()даёт EOFError. -
Запустили скрипт с перенаправленным пустым файлом:
python prog.py < empty.txt.
Что делать:
- Сверьте число
input()с числом строк во входных данных задачи. - Если хотите читать «сколько дадут», обработайте конец ввода:
try:
line = input()
except EOFError:
line = "" # ввод закончился
- Для чтения всех строк до конца удобно:
import sys; data = sys.stdin.read().
Если локально всё ок, а в проверяющей системе EOFError — почти всегда дело в лишнем input() или в неверном формате входных данных.