Функции

Область видимости локальных переменных

Содержание курса

NameError: что происходит при обращении к локальной переменной извне

Изоляция локальных переменных — не просто теория. Если попробовать обратиться к локальной переменной снаружи функции, Python немедленно даст об этом знать.

Вот минимальный пример:

def calc():
    result = 42

calc()
print(result)  # NameError: name 'result' is not defined

Функция calc выполнилась, переменная result внутри неё была создана и получила значение 42. Но как только функция завершила работу — её локальное пространство имён прекратило существование. Переменная result вместе с ним.

Когда интерпретатор доходит до строки print(result), он начинает искать имя result в глобальной области видимости. Там его нет — оно никогда туда не попадало.

Результат: NameError: name 'result' is not defined.

Важно понимать: ошибка возникает не в момент объявления переменной внутри функции и не в момент вызова calc(). Она возникает позже — когда глобальный код пытается использовать имя, которого в его области видимости не существует. Это ошибка времени выполнения (runtime error), и Python сообщает о ней в тот момент, когда натыкается на проблему, а не заранее.

Сообщение NameError: name 'result' is not defined означает буквально: «я не знаю никакой переменной с именем result в том месте, откуда вы её вызываете». Это не значит, что переменная написана с опечаткой — она вполне реально существовала, но в другой области видимости и уже исчезла.

Для сравнения: если переменная вообще нигде не объявлена, ошибка будет той же самой. Python не различает «переменная была, но стала недоступна» и «переменная не существовала никогда» — в обоих случаях он просто не находит имя в текущей области видимости и выдаёт NameError.

Начать заново?

Помощник начнёт новый диалог по этой задаче. Текущая переписка останется в истории до конца срока хранения.

О переписке

Можно приложить до трёх фото PNG, JPEG или WebP по 5 МБ.

Переписка и фото хранятся 90 дней после последнего принятого сообщения. Преподаватель получит доступ к диалогу, когда вы попросите его помочь.

Проверка решения остаётся отдельным действием.