NameError.
Если в теле Python функции использовать переменную, не определённую внутри этой функции, Python будет искать эту переменную в окружающих областях видимости, в соответствии с правилом LEGB (Local, Enclosing, Global, Built-in):
print, len и т.д.
    Если переменная не найдена ни в одной из этих областей видимости, Python вызовет исключение NameError. Это означает, что переменная, которую вы пытаетесь использовать, не была определена.
Пример:
x = 10
def my_function():
  print(x)  # x не определена внутри my_function, но определена в глобальной области видимости
my_function() # Выведет 10
def another_function():
  print(y) # y не определена ни в локальной, ни в охватывающей, ни в глобальной, ни во встроенной области видимости
another_function() # Вызовет NameError: name 'y' is not defined
  
  Важно! Если вы присваиваете значение переменной внутри функции, Python считает её локальной переменной. Чтобы изменить глобальную переменную изнутри функции, нужно использовать ключевое слово global.