折腾:
【未解决】Flask中如何利用环境变量实现自动加载开发还是生产的配置
期间,发现不同地方的获取环境变量的代码,略有不同:
的:os.environ.get
和:
的:os.getenv
想要搞清楚区别
到底用哪个
os.environ.get vs os.getenv
【总结】
Python2.7中写了区别了:
- os.environ.get
- 基于import的逻辑
- -》如果不存在某个环境变量,则会抛KeyError异常
- os.getenv
- (至少是在)CPython中,os.getenv是在os.environ.get的上层封装出来的
- -》如果不存在某个环境变量,不会抛异常,只是返回None而已
所以各自的用法是:
(1)os.environ.get
try: env_value = os.environ.get[" key_ maybe_not_exist"] except KeyError: print("Not exist environment value for %s" % " key_ maybe_not_exist ")
或
if " key_ maybe_not_exist" in os.environ: existed_env_value = os.environ[" key_ maybe_not_exist"]
(2)os.getenv
existed_env_value = os. getenv( " key_ maybe_not_exist")
等价于:
existed_env_value = os. getenv( " key_ maybe_not_exist", default=None )
结论:
一般情况下,还是去用:os.getenv 更加方便:
- 省去了检测是否存在此环境变量的判断了,直接获取值即可
- 万一不存在,也不会抛异常,而只是返回个None
- 后续判断值是否为真,继续操作即可
- 好处是可以根据自己需要,设置自己想要的默认值