Я хочу проверить свою среду на наличие переменной, скажем "FOO"
, в Python. Для этого я использую os
стандартную библиотеку. Прочитав документацию библиотеки, я выяснил 2 способа достижения своей цели:
Способ 1:
if "FOO" in os.environ:
pass
Способ 2:
if os.getenv("FOO") is not None:
pass
Я хотел бы знать, какой метод является хорошим / предпочтительным условным условием и почему.
python
python-2.7
python-3.x
if-statement
environment-variables
Кшитидж Сараоги
источник
источник
foo
находится ли он в env vars, а не ищет лиfoo
результаты вNone
значениях.Ответы:
Используйте первое; он напрямую пытается проверить, определено ли что-то в
environ
. Хотя вторая форма работает одинаково хорошо, ей не хватает семантики, поскольку вы получаете обратно значение, если оно существует, и только используете его для сравнения.Вы пытаетесь увидеть , если что - то присутствует в
environ
, почему вы получите только сравнить его , а затем бросить его подальше ?Это именно то, что
getenv
делает:(это также означает, что ваш чек может быть просто
if getenv("FOO")
)вы не хотите его получать , вы хотите проверить его существование.
В любом случае,
getenv
это просто оболочка,environ.get
но вы не видите людей, проверяющих членство в сопоставлениях с помощью:Подводя итог, используйте:
если вы просто хотите проверить существование, тогда используйте,
getenv("FOO")
если вы действительно хотите что-то сделать со значением, которое вы можете получить.источник
Существует случай для любого решения, в зависимости от того, что вы хотите сделать, при условии наличия переменной среды.
Случай 1
Если вы хотите предпринять различные действия исключительно на основе существования переменной среды, не обращая внимания на ее значение, первое решение - лучший способ. Он кратко описывает, что вы проверяете: есть ли «FOO» в списке переменных среды.
Случай 2
Если вы хотите установить значение по умолчанию, если значение не определено в переменных среды, второе решение действительно полезно, хотя и не в той форме, в которой вы его написали:
или возможно
Обратите внимание: если у вас есть несколько вариантов для вашего приложения, вы можете захотеть изучить
ChainMap
, что позволяет объединить несколько dicts на основе ключей. Пример этого есть вChainMap
документации:источник
На всякий случай используйте
Угловой случай с приведенными выше ответами - это когда переменная среды установлена, но пуста
Для этого особого случая вы получаете
или
Чтобы этого избежать, просто используйте
or
Тогда вы получите
Когда у нас есть пустые переменные среды?
Вы забыли установить значение в
.env
файлеили экспортировано как
или забыл установить это в
settings.py
Обновление: если сомневаетесь, посмотрите эти однострочные
источник
def getenv(key, default=None):
что если да, то вначале должно быть разрешено использование синтаксиса по умолчанию и or>>> import os; os.environ['FOO'] = ''; print(os.getenv('FOO', 'bar'))
$ FOO= python -c "import os; print(os.getenv('FOO', 'bar'))"
Если вы хотите проверить, не заданы ли несколько переменных env, вы можете сделать следующее:
источник
Мой комментарий может не иметь отношения к указанным тегам. Однако в результате поиска я попал на эту страницу. Я искал аналогичную проверку в R, и с помощью сообщения @hugovdbeg я придумал следующее. Надеюсь, это будет полезно для тех, кто ищет подобное решение в R
источник