我是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)
答案 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
。