В процессе работы с Python часто возникает необходимость проверить, определена ли переменная перед её использованием. Это особенно актуально в крупных проектах или сценариях, где значение переменной может быть установлено в зависимости от определённых условий.

Переменная в Python служит для хранения данных, которые можно использовать и изменять в рамках программы. Она позволяет нам присваивать описательные имена данным, что делает код более понятным и удобным для чтения и понимания как для нас самих, так и для других разработчиков.

variable_name = value

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

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

Важно помнить, что в Python всё является объектом. Когда мы создаём переменную, мы по сути создаём метку для объекта, который хранится в определённой области памяти.

Содержание

Почему важна проверка

Две основные причины проверки Python на наличие переменной:

  • Переназначение переменной. В Python переназначение переменной означает присвоение нового значения уже существующей переменной. Когда вы это сделаете, переменная больше не ссылается на свое предыдущее значение(если только другая переменная или структура не содержит ссылку на нее), а вместо этого ссылается на новое значение.
  • Возможны исключения: попытка доступа к этой несуществующей переменной приведет к ошибке NameError в Python. Поэтому крайне важно проверить, существует ли переменная, прежде чем использовать ее.

Случай 1: переназначение переменной

Чтобы избежать переназначения (перезаписи) переменной в коде Python, необходимо проверить, существует ли эта переменная уже.

Например, предположим, что мы отслеживаем перемещения туриста по стране, когда он посещает различные достопримечательности. У нас есть переменная Landmark_visit, которую мы обновляем в Python каждый раз, когда турист посещает новое место.

landmark_visited = "Statue of Liberty, New York"
landmark_visited = "White House, Washington, D.C."
landmark_visited = "Golden Gate Bridge, San Francisco"
landmark_visited = "Waikiki Beach, Honolulu"

print(landmark_visited)

Вывод: выводом является только последнее значение переменной, остальные теряются.

Waikiki Beach, Honolulu

Проверьте, существует ли переменная в Python

Случай 2: исключение возникает при вызове переменной

В Python возникает ошибка NameError, когда мы пытаемся получить доступ к имени переменной, которая не была определена или не была импортирована в текущее пространство имён. Это способ Python сообщить нам, что он не распознаёт имя, которое мы пытаемся использовать.

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

Yellowstone_visitors = 45320
GrandCanyon_visitors = 39210
Yosemite_visitors = 37600

print(GreatSmokyMountains_visitors)

В этом сценарии, связанном с национальными парками США, аналитик использовал Python для получения данных о количестве посетителей конкретного парка. Однако он не убедился, что сначала определил соответствующую переменную. В результате возникла ошибка NameError, поскольку Python не смог распознать имя переменной, на которую шла ссылка.

Traceback(most recent call last):
  File "C:\Users\kumar\PycharmProjects\pythonProject1\main.py", line 5, in 
    print(GreatSmokyMountains_visitors)
NameError: name 'GreatSmokyMountains_visitors' is not defined

Случай 2: исключение возникает при вызове переменной 

Методы проверки

Существует пять различных способов проверить, существует ли переменная в Python. Давайте рассмотрим их по отдельности на наглядных примерах.

Метод 1: используя оператор if

Иногда нам нужно проверить не только наличие переменной Python, но и то, имеет ли она какое-то значение (то есть не является ли она None или пустой структурой).

Этот метод полезен, когда переменная может существовать, но при этом быть пустой (None), содержать пустой список, пустую строку и так далее. Важно помнить, что в Python такие структуры, как пустые списки, строки, словари и так далее, считаются ложными в логическом контексте.

Например, если мы живём в Нью-Йорке и хотим составить список мероприятий, которые посетим в этом месяце, мы можем использовать Python для проверки переменной. Мы хотим, чтобы Python проверял, добавили ли мы какие-либо события за этот месяц, или же список событий пуст.

events_this_month = []

if events_this_month:
    print(f"You're attending these events: {', '.join(events_this_month)}")
else:
    print('You have no events this month.')

Вывод: поскольку «events_this_month» хранит пустой список Python. Итак, оператор else сработал.

You have no events this month.

Метод 1: используя оператор if

Метод 2: используя попытку и исключение

В Python для обработки возможных ошибок часто используется подход «попробуй и кроме» (try-except). Это позволяет корректно управлять ошибкой, если переменная не существует.

Например, рассмотрим туристическое агентство во Флориде. Туристы могут выбирать различные пакеты, но не все они доступны каждый день. Если клиент выбирает пакет beach_package, агентство может использовать:

city_tour = "Three cities tour"
adventure_trip = "Trekking"
jungle_package = "Jungle Adventure Day Trip"

def book_package(package_name):
    print(f"Successfully booked: {package_name}")

try:
    book_package(beach_package)
except NameError:
    print("Sorry, the selected package isn't available today.")

Результат:

Sorry, the selected package isn't available today.

Метод 2: используя попытку и исключение

Метод 3: с функцией globals()

Функция globals() в Python представляет собой словарь, содержащий все глобальные переменные, доступные в текущем контексте программы. Этот словарь позволяет Python проверить, определена ли та или иная переменная.

Например, мы составляем список национальных парков Python и среднее количество их посетителей.

nationalParks = {"Yellowstone": 4000000, "Yosemite": 3000000}

if 'nationalParks' in globals():
    print("National parks data is available!")
else:
    print("Data not found.")

Результат:

National parks data is available!

Метод 3: с функцией globals()

Метод 4: с функцией locals()

В то время как функция globals() предоставляет нам доступ к глобальным переменным, функция locals() позволяет получить словарь текущего пространства имён Python.

Это может быть полезно, если внутри функции вы хотите проверить, существует ли в Python локальная переменная, например, количество посетителей «Гранд-Каньон».

def parkData():
    grandCanyonCount = 5000000
    if 'grandCanyonCount' in locals():
        print(f"Grand Canyon sees {grandCanyonCount} visitors on average.")
    else:
        print("Data not available for Grand Canyon.")

parkData()

Результат:

Grand Canyon sees 5000000 visitors on average.

Метод 4: с функцией locals()

Метод 5: с помощью функции dir()

Метод dir() возвращает список имён, которые определены в текущей локальной области видимости, или список атрибутов объекта.

Например, мы можем использовать этот метод, чтобы проверить, существует ли в Python переменная, которая хранит количество штатов в США.

numberOfStates = 50

if 'numberOfStates' in dir():
    print(f"The USA has {numberOfStates} states.")

Результат:

The USA has 50 states.

Метод 5: с помощью функции dir()

Добавить комментарий