x = 10
def test():
    def inner():
        global x
        x = 15
    inner()
test()
print(x)
Код выведет число 15.
Функция inner() использует ключевое слово global, чтобы указать, что она работает с глобальной переменной x, а не создает локальную переменную с тем же именем.  Поэтому, когда inner() присваивает x = 15, она изменяет значение глобальной переменной x.
Этот код содержит ошибку, так как переменная x не определена в глобальной области видимости до ее использования в функции inner.
Вот как код попытается выполниться:
test определена.inner определена внутри test.test().test() вызывается функция inner().inner() происходит объявление глобальной переменной x и присвоение ей значения 15.test() завершает свою работу.test(), интерпретатор попытается выполнить print(x).Проблема:  Переменная x не была объявлена вне функции inner, то есть ее не было в глобальном пространстве имен до момента ее использования в `inner`.  Ключевое слово global внутри inner создает глобальную переменную, если ее еще не было.  Однако, перед вызовом test(), x не существует, но Python не поднимает ошибку в момент объявления `test()`. Ошибка произойдет только во время выполнения функции, а именно когда вы попытаетесь напечатать неопределенную глобальную переменную `x`.
Решение и исправление:
Чтобы исправить ошибку, необходимо либо определить x до вызова test(), либо обернуть print(x) в функцию и вызывать ее внутри test().  Пример:
x = 10  # Определяем x в глобальной области видимости (любое значение)
def test():
    def inner():
        global x
        x = 15
    inner()
test()
print(x) # Выведет 15
  Теперь код будет работать, и на экран будет выведено 15. Другой вариант:
def test():
    x = None  # Локальная переменная x
    def inner():
        nonlocal x
        x = 15
    inner()
    print(x)
test()
# print(x) # NameError: name 'x' is not defined
  В этом случае выведется 15, но переменная x будет существовать только в области видимости функции test().
Возможный вопрос интервьюера: Что будет, если убрать global?
Ответ: Если убрать global, функция inner создаст локальную переменную x внутри своей области видимости. Глобальная переменная x не будет изменена. После завершения test() при попытке print(x) возникнет ошибка NameError: name 'x' is not defined, так как глобальная переменная x никогда не была определена до вызова test.