2017-06-14 51 views
-1

是否有更优化的方法可以检查是否存在具有自定义异常的多个ENV变量?也许一种匹配一组EVN变量的方法,然后让异常在其输出中自引用变量名称?检查是否存在多个ENV变量

if os.environ.get('USERNAME') is not None: 
    self.username = os.environ.get('USERNAME') 
else: 
    raise CustomException('Environment variable USERNAME not set') 
if os.environ.get('PASSWORD') is not None: 
    self.password = os.environ.get('PASSWORD') 
else: 
    raise CustomException('Environment variable PASSWORD not set') 

我正在使用Python 2.7。谢谢!

回答

0

你总是可以使用一个循环用三个项目清单:

for data in [ 
    ["USERNAME", "username", CustomException], 
    ["PASSWORD", "password", CustomException] 
]: 
    env_var = os.environ.get(data[0]) 


    if env_var: 
     setattr(self, data[1], env_var) 
    else: 
     # Should work, cannot check due to not having actually Python installed. 
     raise data[2]("Environment variable %s not set" % data[0]) 

如果你不喜欢使用索引,你可以通过这样的类型的字典更换的项目,如果你改变有一个更一致的访问顺序:

{"env_var_name": "USERNAME", "attr": "username", "exception_cls": CustomException} 
0

只要把所有的环境中查找在try:块:

try: 
    self.username= os.environ['USERNAME'] 
    self.password= os.environ['PASSWORD'] 
except KeyError as e: 
    raise CustomException('Environment variable {} not set'.format(e.args[0])) 
+0

如果奈特神呃被设置,它显示“USERNAME”未设置。 – EthanB

+0

@EhanhanB好的,是的。你的代码就是这样。 –

+0

我试图避免的是为每个ENV变量创建一个匹配语句。我总共有10个。但如果不存在多于一个,我希望所有不存在的条目都显示在例外中。 – EthanB