Какова хорошая практика, чтобы проверить, существует ли переменная среды или нет?
Я хочу проверить свою среду на наличие переменной, скажем, «FOO» в Python. Для этой цели я использую стандартную библиотеку os . Прочитав документацию библиотеки, я нашел 2 способа достижения своей цели:
Я хотел бы знать, какой метод, если либо, является хорошим / предпочтительным условным и почему.
4 ответа
Используйте первое; он напрямую пытается проверить, определено ли что-то в environ . Хотя вторая форма работает одинаково хорошо, семантически не хватает, поскольку вы возвращаете значение, если оно существует, и only использует его для сравнения.
Вы пытаетесь узнать, присутствует ли что-то в environ , зачем вам получать просто для сравнения, а затем отбросить это ?
Это именно то, что делает getenv :
Получить переменную среды , вернуть None , если она не существует. необязательный второй аргумент может указывать альтернативное значение по умолчанию.
(это также означает, что ваша проверка может быть if getenv(«FOO») )
Вы не хотите получить его , вы хотите проверить его существование.
В любом случае, getenv — просто оболочка вокруг environ.get , но вы не видите людей, проверяющих членство в сопоставлениях с:
Подводя итог, используйте:
Если вы просто хотите проверить существование, то используйте getenv(«FOO») , если вы действительно хотите что-то сделать со значением, которое вы можете получить.
Чтобы быть на безопасной стороне, используйте
Угловой случай с ответами выше — это когда переменная окружения установлена, но пуста
Для этого особого случая вы получаете
Чтобы избежать этого, просто используйте or
Тогда вы получите
Когда у нас есть пустые переменные окружения?
Вы забыли установить значение в файле .env
Или экспортируется как
Или забыл установить его в settings.py
Обновление: если есть сомнения, ознакомьтесь с этими однострочниками
Если вы хотите проверить, не заданы ли несколько переменных env, вы можете сделать следующее:
Существует вариант для любого решения, в зависимости от того, что вы хотите сделать, при условии наличия переменной среды.
Случай 1
Если вы хотите предпринять различные действия исключительно на основе существования переменной среды, не заботясь о ее значении, первое решение является наилучшей практикой. В нем кратко описывается, что вы проверяете: «FOO» в списке переменных среды.
Дело 2
Если вы хотите установить значение по умолчанию, если это значение не определено в переменных среды, второе решение действительно полезно, хотя и не в той форме, в которой вы его написали:
Обратите внимание, что если у вас есть несколько вариантов для вашего приложения, вы можете посмотреть <
What is a good practice to check if an environmental variable exists or not?
I want to check my environment for the existence of a variable, say «FOO» , in Python. For this purpose, I am using the os standard library. After reading the library’s documentation, I have figured out 2 ways to achieve my goal:
I would like to know which method, if either, is a good/preferred conditional and why.
![]()
![]()
6 Answers 6
Use the first; it directly tries to check if something is defined in environ . Though the second form works equally well, it’s lacking semantically since you get a value back if it exists and only use it for a comparison.
You’re trying to see if something is present in environ , why would you get just to compare it and then toss it away?
That’s exactly what getenv does:
Get an environment variable, return None if it doesn’t exist. The optional second argument can specify an alternate default.
(this also means your check could just be if getenv(«FOO») )
you don’t want to get it, you want to check for it’s existence.
Either way, getenv is just a wrapper around environ.get but you don’t see people checking for membership in mappings with:
To summarize, use:
if you just want to check for existence, while, use getenv(«FOO») if you actually want to do something with the value you might get.
![]()
There is a case for either solution, depending on what you want to do conditional on the existence of the environment variable.
Case 1
When you want to take different actions purely based on the existence of the environment variable, without caring for its value, the first solution is the best practice. It succinctly describes what you test for: is ‘FOO’ in the list of environment variables.
Case 2
When you want to set a default value if the value is not defined in the environment variables the second solution is actually useful, though not in the form you wrote it:
Note that if you have several options for your application you might want to look into ChainMap , which allows to merge multiple dicts based on keys. There is an example of this in the ChainMap documentation:
As pointed out by @Levon, this might return unexpected results if the variable is set but empty. You should therefore also check the returned value. For example like:
To be on the safe side use
A corner case with the above answers is when the environment variable is set but is empty
For this special case you get
To avoid this just use or
When do we have empty environment variables?
You forgot to set the value in the .env file
or forgot to set it in settings.py
Update: if in doubt, check out these one-liners
![]()
In case you want to check if multiple env variables are not set, you can do the following:
![]()
I’d recommend the following solution.
It prints the env vars you didn’t include, which lets you add them all at once. If you go for the for loop, you’re going to have to rerun the program to see each missing var.
Considering that you’re using an environment variable named Foo which could change based on different environments, I would suggest to get its value and INFO (or DEBUG) log it even if you use its value (e.g. boolean) just as a toggle or decision-making criterion. It could help you when something goes wrong or just for sanity check later.
I would advise against hardcoding alternatives in the code itself without proper logging. Using foo = os.getenv("FOO", "BAR") could silently change the behavior of your code.
Also, it is best to have all your constants either in a config file or as environment variables and don’t hardcode anything in the source code itself. Defaults and alternatives could go inside the config file and environment-changing constants should be env vars so that you could change them during the deployments easily.
Переменные среды в Python
Мы можем установить переменные среды в Python с помощью модуля os. Модуль os в Python работает как словарь, в котором хранятся переменные среды, доступные программе в данный момент.
Как распечатать текущие переменные среды?
Мы можем напечатать переменную os.environ, чтобы узнать о существующих переменных средах, доступных программе.

Проверить, существуют ли переменные среды или нет?
Мы можем проверить, существуют ли переменные среды или нет, используя оператор in.
Изменение значений может иметь серьезные последствия для выполнения программы. Следовательно, рекомендуется сначала проверить, существуют ли переменные среды или нет. Тогда вам решать, хотите ли вы изменить значение или нет.
Мы можем установить переменные среды, как мы устанавливаем значения в словаре.
Обратите внимание, что пара ключ-значение должна быть строкой, в противном случае возникнет ошибка.
Чтение
Давайте посмотрим, как читать переменные среды, которые мы установили в приведенном выше фрагменте кода.
Вывод: Версия MySQL = 5.7.18
Но правильный ли способ? Посмотрим, что произойдет, если переменные среды отсутствуют.
Лучший способ – использовать функцию get. Если переменные отсутствуют, она вернет None.
Мы также можем указать значение по умолчанию, которое будет возвращаться, если переменная отсутствует.
Проверяем, присвоено ли значение переменной окружения Python

Давайте создадим Python-файл со следующим скриптом для проверки переменных. Для чтения значений переменных мы используем модуль os, а модуль sys — для прекращения работы приложения.
Бесконечный цикл while непрерывно принимает от пользователя имена переменных и проверяет их значения до тех пор, пока пользователь не введёт имя переменной, которой не присвоено значение.
Если пользователь вводит имя переменной окружения, которой присвоено значение, это значение выводится, если же нет — выводится соответствующее сообщение и процесс останавливается.