Что означает ошибка NameError: name is not defined
easy

Что означает ошибка NameError: name is not defined

Самая простая ошибка в Python

Ситуация: обычный рабочий проект, пишем простую функцию сложения, которая возвращает сумму двух чисел:

def calculate_sum(x, y):
    total = x + y
    return total

Немного позже нам нужно использовать эту функцию, чтобы что-то посчитать. Берём две переменные и указываем их как аргументы при вызове:

value = 600
diffusion = 700
c = calculate_sum(value, difusion)
print(c)

Но при запуске компьютер вдруг выдаёт ошибку:

❌ NameError: name 'difusion' is not defined

Что это значит: Python не понимает, откуда взялась переменная difusion. и не знает, как с ней работать. 

Когда встречается: эта ошибка может появиться, когда разработчик:

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

Область видимости определяет, к каким переменным функция, команда или другая переменная может получить доступ, а к каким нет. Проще говоря, что каждая функция «видит» — видит ли она те переменные и объекты, которые созданы за её пределами? Видит ли она то, что вложено в функции, которые запускаются внутри неё?

Обычно так: если переменная объявлена в самой программе, к ней можно получить доступ из вложенной функции. А если объявить переменную внутри функции, то обратиться к ней извне не получится.

Что делать с ошибкой NameError 

В нашем примере — опечатка: мы написали difusion вместо diffusion. Исправляем ошибку и получаем рабочий код:

def calculate_sum(x, y):
    total = x + y
    return total
value = 600
diffusion = 700
c = calculate_sum(value, diffusion)
print(c)

В простом коде такую ошибку заметить легко, но если мы будем работать со сложным проектом, где несколько тысяч строк кода, то это может стать проблемой. С другой стороны, современные редакторы кода сами следят за тем, какие переменные есть в проекте и помечают те, которые используются по ошибке:

Что означает ошибка NameError: name is not defined

Ту же ошибку мы получим, если попробуем сначала вызвать функцию даже с правильными аргументами до того, как определим их:

Что означает ошибка NameError: name is not defined

А вот пример такой же ошибки с областью видимости: в одной функции мы объявляем переменные, а потом пробуем использовать их в основной программе. Проблема в том, что код не видит переменные внутри функции, поэтому не может получить их значения при вызове:

Что означает ошибка NameError: name is not defined

Текст:

Елена Кочеткова

Художник:

Алексей Сухов

Корректор:

Ирина Михеева

Вёрстка:

Кирилл Климентьев

Соцсети:

Юлия Зубарева

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Вам может быть интересно
easy