Ric*_*ano 19 if-statement boolean python-3.x
在 Python 中,如何评估 env 变量是否为布尔值 True?使用是否正确:
if os.environ['ENV_VAR'] is True:
.......
Run Code Online (Sandbox Code Playgroud)
Rui*_*ins 44
我认为这很有效:
my_env = os.getenv("ENV_VAR", 'False').lower() in ('true', '1', 't')
Run Code Online (Sandbox Code Playgroud)
它允许:true, True, TRUE, 1, "1", TrUe, t, T, ...
更新:在我阅读了 Klaas 的评论后,我将原始代码更新my_env = bool(os.getenv(...为my_env = os.getenv(...因为in会导致一个bool类型
Val*_*Duz 27
我建议使用strtobool函数
例子:
DEBUG = strtobool(os.getenv("DEBUG", "false"))
Run Code Online (Sandbox Code Playgroud)
您可以在 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"))
Run Code Online (Sandbox Code Playgroud)
输出
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'
Run Code Online (Sandbox Code Playgroud)
Are*_*k S 12
都是一样的,但对我来说这是最易读的版本:
DEBUG = (os.getenv('DEBUG', 'False') == 'True')
Run Code Online (Sandbox Code Playgroud)
这里的任何东西True都会评估为 False。除非True在 ENV 中明确设置为 DEBUG 为 False
yeg*_*ski 10
强烈推荐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.")
Run Code Online (Sandbox Code Playgroud)
你的这两种方法都行不通。os.environ['ENV_VAR']如果键不存在,单独将导致 a ,如果存在KeyError则返回与 a 关联的值。'ENV_VAR'无论哪种情况,您都会出错,或者与Trueor进行比较"true",这总是会导致结果False(除非与环境变量关联的值恰好是"true";但这不是您想要的)。
要检查映射是否包含特定键,您可以使用in:
if 'ENV_VAR' in os.environ:
# It contains the key
else:
# It doesn't contain the key
Run Code Online (Sandbox Code Playgroud)
另一种接受“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)
Run Code Online (Sandbox Code Playgroud)
我使用以下内容来进行更严格的输入并支持输入中更广泛的布尔变化
import os
def getenv_bool(name: str, default: bool = False) -> bool:
return os.getenv(name, str(default)).lower() in ("yes", "y", "true", "1", "t")
Run Code Online (Sandbox Code Playgroud)
用法 :
feature_1=getenv_bool('FEATURE_1', False)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16490 次 |
| 最近记录: |