Выбор ответа Middle Модули, пакеты и окружения спрашивают часто обновлено
Циклический импорт и from-импорт
Вопрос
a.py начинается с from b import helper, а b.py с from a import CONFIG (CONFIG объявлен в a ниже импорта). Что будет при import a?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: ImportError: a ещё не выполнен, CONFIG в нём нет. Python кладёт a в sys.modules до выполнения его кода.
Варианты ответа
- Бесконечная рекурсия импортов и
RecursionError ImportError:aещё не выполнен,CONFIGв нём нетправильный ответ- Всё сработает: Python сам упорядочит импорт модулей
SyntaxErrorпри компиляции из-за цикла импортов
Разбор
Python кладёт a в sys.modules до выполнения его кода. Затем a импортирует b, а b пытается взять CONFIG из ещё не выполненного a и получает ImportError: cannot import name ... (most likely due to a circular import). Бесконечной рекурсии нет как раз благодаря sys.modules. Лечат выносом общего в третий модуль или поздним импортом.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.