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

dynamic if boolean with module lookup

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

在这种情况下,我的 app.py 程序旁边有一个 settings_file.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 解析回字符串。可能是我排版不正确

我无法解析变量名。

编辑:也许我没说清楚,或者误导了。我正在尝试 return 从我在其中编写此元素的通用函数返回设置文件中的值。我想要的结果是 "foo" 将被 returned,这是 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)

如果您正在评估变量名,或者想要灵活的变量名,10 次中有 9 次,您应该使用 dicts。

在这里,还有(甚至)更多的事情要做:在尝试获取属性之前,您应该首先检查 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)

which returns None 如果找不到 "myvariable",或者导入失败。它没有明确测试 settings_file 不是 None,因为 getattr() 将只是 return None,无论 element_name 的值如何。