从os.environ
获取许多配置值时,最好在python代码中使用默认值,以便轻松地允许应用程序在许多上下文中启动。一个典型的姜戈 settings.py 有许多
SOME_SETTING = os.environ.get('SOME_SETTING')
线。
为了提供合理的默认值,我们选择了
SOME_SETTING = os.environ.get('SOME_SETTING') or "theValue"
但是,这很容易出错,因为使用
SOME_SETTING=""
manage.py
将导致SOME_SETTING
设置为theValue
而不是显式定义的""
有没有办法使用三元a = b if b else d
在 python 中分配值,而无需重复b
或之前将其分配给速记变量?
如果我们看一下,这一点就会变得很明显
SOME_VERY_LONG_VAR_NAME = os.environ.get('SOME_VERY_LONG_VAR_NAME') if os.environ.get('SOME_VERY_LONG_VAR_NAME') else 'meh'
能够做这样的事情会更好
SOME_VERY_LONG_VAR_NAME = if os.environ.get('SOME_VERY_LONG_VAR_NAME') else 'meh'
就像Python的内置映射类dict
一样,os.environ.get
有第二个参数,看起来你想要它:
SOME_SETTING = os.environ.get('SOME_SETTING', "theValue")
这与
try:
SOME_SETTING = os.environ['SOME_SETTING']
except KeyError:
SOME_SETTING = "theValue"
如果你阅读dict.get()
的文档,你会发现该方法的签名是get(self, key, default=None)
。default
参数是在字典中找不到键时返回的内容(并且默认为合理的None
)。因此,您可以使用第二个参数,而不是执行错误的布尔测试:
SOME_SETTING = os.environ.get('SOME_SETTING', "theValue")