Работа с os.environ и os.getenv в Python
@python_quizРазберем этот квиз
Коротко: код добавляет переменную окружения в текущий процесс и затем проверяет её наличие и значения через разные методы. Давайте разберёмся, что именно происходит и почему.
Условие (фрагмент кода)

Как это работает — ключевые моменты
- os.environ — это отображение (mapping) переменных окружения текущего процесса. По сути это словарь, где ключи и значения — строки.
- Присвоение os.environ['TOKEN'] = '123' добавляет или обновляет соответствующую переменную окружения в процессе.
- Оператор
'TOKEN' in os.environпроверяет наличие ключа в этом mapping — вернёт True, если ключ присутствует. - os.getenv(name,
default=None) возвращает значение переменной окружения name либо default (по умолчанию None), если ключа нет. - os.environ.get(name,
default=None) работает аналогично стандартному dict.get — возвращает значение или default, если ключ отсутствует. - Примечание: значения в os.environ — строки. Даже если присвоить число, при попытке записать непроходящий тип будет
TypeError; обычно используется строка.
Ожидаемый вывод при запуске
Если запустить приведённый код, на экран выведется строка:

Можно явно увидеть типы и формат вывода:

Вывод:

Разбор вариантов ответа (логика)
Даны варианты вывода, разберём каждый по логике:
- "False 123 x"
Неверно. После присвоения ключ 'TOKEN' присутствует в os.environ, так что 'TOKEN' in os.environ не может быть False.
- "True 123 x"
Этот вариант согласуется со всеми правилами: ключ добавлен, os.getenv возвращает присвоенное значение '123', а для отсутствующего ключа MISSING используется указанный дефолт 'x'.
- "True None x"
Неверно. os.getenv('TOKEN') вернёт присвоенное значение '123', а не None.
- "True 123 None"
Неверно. Для отсутствующего ключа была указана альтернатива 'x' через os.environ.get(..., 'x'), поэтому результат не будет None.
Частые нюансы и рекомендации
- os.getenv и os.environ.get — взаимозаменяемы в простых случаях, но os.getenv специально предназначен для работы с окружением.
- Если обращаться через os.environ['NAME'] к несуществующему ключу, будет поднято
KeyError; чтобы избежать этого, используйте .get или os.getenv с дефолтом. - Изменения в os.environ влияют только на текущий процесс и процессы, порождённые им после изменения. Они не изменяют системные/глобальные настройки окружения вне этого процесса.
- Значения должны быть строками; при передаче другим утилитам или subprocess они будут интерпретироваться как текст.
Вывод
Присвоение в os.environ вставляет ключ в отображение переменных окружения текущего процесса. Проверка наличия ключа, чтение значения и чтение с дефолтом работают как в обычном словаре/через os.getenv, поэтому приведённый код выводит: True 123 x.