在 Python 中评估布尔环境变量

Evaluate boolean environment variable in Python

如何在 Python 中评估环境变量是否为布尔值 True?使用是否正确:

if os.environ['ENV_VAR'] is True:
      .......

这两种方法都行不通。如果键不存在,单独 os.environ['ENV_VAR'] 将导致 KeyError,如果存在,将 return 与 'ENV_VAR' 关联的值。在任何一种情况下,您都会出错,或者与 True"true" 进行比较,这将始终导致 False(除非与环境变量关联的值恰好是 "true"; 但这不是你想要的)。

要检查映射是否包含特定键,您可以使用 in:

if 'ENV_VAR' in os.environ:
    # It contains the key
else:
    # It doesn't contain the key

接受“false”、“False”、“true”或“True”的另一种选择:

import os
import ast

def getenv_bool(name: str, default: str = "False"):
    raw = os.getenv(name, default).title()
    return ast.literal_eval(raw)

我认为这很有效:

my_env = os.getenv("ENV_VAR", 'False').lower() in ('true', '1', 't')

它允许:trueTrueTRUE1"1"TrUet, T, ...

更新:看了Klaas的评论后,我将原来的代码my_env = bool(os.getenv(...更新为my_env = os.getenv(...,因为in会得到bool类型[=23] =]

都一样,但这对我来说是最易读的版本:

DEBUG = (os.getenv('DEBUG', 'False') == 'True')

此处除 True 之外的任何值都将计算为 False。 DEBUG 为 False,除非在 ENV

中明确设置为 True

我使用以下内容来进行更严格的输入并支持输入中更广泛的布尔变量

import os

def getenv_bool(name: str, default: bool = False) -> bool:
    return os.getenv(name, str(default)).lower() in ("yes", "y", "true", "1", "t")

用法:

feature_1=getenv_bool('FEATURE_1', False)

我推荐使用strtobool函数

示例:

DEBUG = strtobool(os.getenv("DEBUG", "false"))

您可以在 python 文档中查看它们 https://docs.python.org/3/distutils/apiref.html#distutils.util.strtobool

只有一个问题,如果您传递了错误的值,它们会引发错误

代码

from distutils.util import strtobool

print("Value: ", strtobool("false"))

print("Value: ", strtobool("Wrong value"))

输出

Value:  0
Traceback (most recent call last):
  File "<string>", line 9, in <module>
  File "/usr/lib/python3.8/distutils/util.py", line 319, in strtobool
    raise ValueError("invalid truth value %r" % (val,))
ValueError: invalid truth value 'wrong value'

强烈推荐environs

from environs import Env

env = Env()

MY_BOOL_VALUE = env.bool("MY_BOOL_VALUE", False)

if MY_BOOL_VALUE:
    print("MY_BOOL_VALUE was set to True.")
else:
    print("MY_BOOL_VALUE was either set to False or was not defined.")