// каталог ошибок · 9 сообщений

Ошибки окружения в Python: ввод, импорт, файлы, рекурсия

Программа упирается в окружение, а не в собственную логику: закончился ввод, модуль не установлен или назван иначе, файла нет по указанному пути, рекурсия ушла слишком глубоко. Здесь же assert, остановка по Ctrl+C и исчерпанный итератор.

Свой трейсбек удобнее вставить в расшифровщик: он сам найдёт нужное сообщение и подставит имена из твоего кода в объяснение. Ниже — все сообщения семейства по порядку, у каждого постоянная ссылка.

Окружение: ввод, импорт, файлы, рекурсия 9

EOFError: EOF when reading a line

конец ввода при чтении строки

Программа вызвала input(), а строк ввода больше нет. В задачах с автопроверкой ввод заканчивается ровно там, где его описывает условие.

частые причины

  • input() вызван больше раз, чем строк в условии.
  • Лишний input() для «нажми Enter».
  • В песочнице без панели ввода input() читать нечего.

как починить

Читай ровно столько строк, сколько даёт условие. Несколько чисел в одной строке разбирай через split().

было

a = int(input())
b = int(input())

стало

a, b = map(int, input().split())

песочница Python с панелью ввода

RecursionError: maximum recursion depth exceeded

превышена максимальная глубина рекурсии

Функция вызывает сама себя без остановки: нет базового случая или он недостижим.

частые причины

  • Рекурсивная функция без условия выхода.
  • Аргумент в рекурсивном вызове не уменьшается.
  • Функция случайно названа как встроенная и вызывает себя.

как починить

Добавь условие выхода в начале функции и убедись, что каждый вызов приближает к нему.

было

def fact(n):
    return n * fact(n - 1)

стало

def fact(n):
    if n <= 1:
        return 1
    return n * fact(n - 1)

функции в справочнике

ModuleNotFoundError: No module named 'requests'

модуль requests не найден

Python не нашёл модуль requests: он не установлен в этом окружении или имя написано с ошибкой.

частые причины

  • Библиотека не установлена: pip install requests.
  • Установлена в другое окружение, не то, из которого запускается код.
  • Опечатка в имени модуля.
  • В песочнице и тренажёре Koddo доступна только стандартная библиотека.

как починить

Установи модуль в текущее окружение или проверь имя. Сторонние пакеты в браузерной песочнице не работают.

ModuleNotFoundError в справочнике

ImportError: cannot import name 'helper' from 'utils'

нельзя импортировать helper из utils

Модуль utils найден, но имени helper в нём нет.

частые причины

  • Опечатка в имени функции.
  • Свой файл назван как библиотека и импортируется вместо неё.
  • Два модуля импортируют друг друга по кругу.

как починить

Проверь имя в модуле, переименуй файл-тёзку и разорви циклический импорт.

ImportError в справочнике

ImportError

ошибка импорта

Модуль найден, но импортировать из него нужное не удалось.

частые причины

  • Неверное имя.
  • Циклический импорт.

как починить

Проверь имя и порядок импортов.

ImportError в справочнике

FileNotFoundError: [Errno 2] No such file or directory: 'data.txt'

нет такого файла или папки: data.txt

Файл data.txt не найден по этому пути. Относительный путь считается от папки, из которой запущена программа, а не от папки скрипта.

частые причины

  • Файл лежит в другой папке.
  • Опечатка в имени или расширении.
  • Программа запущена из другой рабочей папки.

как починить

Проверь путь через os.getcwd() или собери его от папки скрипта: Path(__file__).parent / "data.txt".

работа с файлами в справочнике

KeyboardInterrupt

прерывание с клавиатуры

Программу остановили снаружи: Ctrl+C в терминале или остановка в редакторе. Это не ошибка в коде.

частые причины

  • Ты сам прервал выполнение.
  • Программа зависла в бесконечном цикле или ждала ввода, и её остановили.

как починить

Если прерывать пришлось из-за зависания, найди цикл без выхода или лишний input().

циклы в справочнике

StopIteration

итератор исчерпан

next() вызван у итератора, в котором элементы закончились.

частые причины

  • next() вызывается чаще, чем есть элементов.
  • Генератор уже пройден до конца.

как починить

Передай значение по умолчанию: next(it, None), или перебирай через for.

генераторы в справочнике

AssertionError

проверка не прошла

assert получил ложное условие. В задачах с автопроверкой так выглядит тест, который сравнил твой результат с ожидаемым и не сошёлся.

частые причины

  • Функция возвращает не то значение или не тот тип.
  • Лишний print вместо return.
  • Крайний случай: пустой ввод, ноль, отрицательное число.

как починить

Прочитай, какие значения сравнивал тест, и вызови свою функцию с ними вручную.

try/except в справочнике

Как искать причину

  1. ModuleNotFoundError и ImportError: команда pip show имя_модуля покажет, установлен ли он. Убедись, что pip и python из одного окружения (python -m pip install), и что твой файл не называется как модуль, например random.py или requests.py.
  2. FileNotFoundError: программа ищет файл относительно текущей папки, а не папки со скриптом. Напечатай os.getcwd() и строй путь от __file__, если файл лежит рядом со скриптом.
  3. EOFError: input() вызван, когда ввод уже закончился. В тренажёрах и на проверке ввод конечный, поэтому читай ровно столько строк, сколько обещано в условии, и не вызывай input() в бесконечном цикле.
  4. RecursionError: нет базового случая или он недостижим при таких данных. Для больших входов замени рекурсию циклом или явным стеком.
  5. AssertionError сработала на твоей собственной проверке assert. KeyboardInterrupt означает Ctrl+C. StopIteration приходит от next() на исчерпанном итераторе: передай значение по умолчанию вторым аргументом.

Как читать трейсбек

  1. Читай снизу вверх: последняя строка называет ошибку и объясняет её текстом.
  2. Строка выше с File "...", line N показывает, где Python остановился. Для SyntaxError причина часто на строке выше указанной.
  3. Стрелка ^ под кодом отмечает место, где разбор сломался.

Дальше