动态,如果布尔值与模块查找

时间:2018-12-05 13:19:58

标签: python boolean-expression

我是python的新手,我试图找出一个问题,试图编写一个通用函数。

在这种情况下,我的settings_file.py程序旁边有一个app.py文件。 settings_file.py是可选的。

settings_file.py的内容:

myvariable = "foo"

在我的程序中,我(可选)导入设置文件:

try:
    import settings_file
except ImportError:
    pass

本地版本:

if settings_file.myvariable:
  print "myvariable found from settings_file!"
  return settings_file.myvariable

我要做什么:

element_name = "myvariable"

if settings_file.eval(element_name):
  print "{} found from settings_file!".format(element_name)
  return settings_file.element_name

我认为我正在苦苦挣扎的是if语句行,更具体地说是settings_file.eval(element_name)部分。

我对此很陌生,我的理解是python应该为我将element_name解析为字符串。也许我没有正确排版。

我无法解析变量名。

编辑:也许我不清楚,还是有误导性。我试图从我正在其中写入此元素的通用函数返回设置文件中的值。我希望得到的结果是将返回“ foo”,它是settings_file.py中变量“ myvariable”的值。

Edit2:我想我根据@ 9769953的响应制定了一些建议

if getattr(settings_file, element_name, None):
  print "{} found from settings_file!".format(element_name)
  return getattr(settings_file, element_name, None)

1 个答案:

答案 0 :(得分:2)

如果您要评估变量名,或者想要灵活的变量名,请使用10次中的9次,dict

这里,还有(甚至)更多的事情:在尝试获取属性之前,您应该首先检查settings_file是否确实存在。然后,您可以使用getattr(settings_file, element_name)

try:
    import settings_file
except ImportError:
    settings_file = None

...

element_name = "myvariable"
return getattr(settings_file, element_name, None)

如果未找到None或导入失败,则返回"myvariable"。它不会明确测试settings_file是否不是None,因为无论getattr()的值如何,None都将只返回element_name