在 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')
它允许:true
、True
、TRUE
、1
、"1"
、TrUe
、t
, 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.")
如何在 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')
它允许:true
、True
、TRUE
、1
、"1"
、TrUe
、t
, 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.")