所以我有2个文件,file1.py和file2.py
我有一些来自file2.py
的名单sam和dan所以当我从file1.py尝试这个时,我得到了
AttributeError: 'module' object has no attribute 'myvar'
file1.py
import file2
f_var=[]
myvar = raw_input("some string")
if myvar == "sam":
f_var = loopbov("sam")
def loopbov(myvar):
lst=[]
for each in file2.myvar:
te = fet(each):
lst.append(te)
return lst
def fet(vpf):
tmp=[]
# this gets me an list as an output
return tmp
file2.py
sam=["33:89","21:70"]
dan=["34:43","23:56"]
我知道这是一个简单的错误,但有人可以解释如何通过解析这里的对象来访问另一个文件
答案 0 :(得分:2)
所以,在file2.py
中定义了两个变量,对吧? sam
和dan
。
你可以看到,比Python更有优势,一切都是对象:
import file2
print("This is what I found in file2:\n%s" % vars(file2))
您会看到一些东西,但除此之外,您还会看到sam
和dan
个变量。没有myvar
名称,对吗?在您的问题中,file1.py
' myvar
将包含您要访问的变量的名称 ...
在getattr
进来的地方:给定一个实例,如果你知道它的名字(如果你的名字存储在一个字符串中),怎么能得到它的一个字段。像这样:getattr(file2, myvar)
因此,您传递列表名称以在loopbov
参数中进行迭代的myvar
函数将变为:
def loopbov(myvar):
lst=[]
for each in getattr(file2, myvar):
# myvar will be the string `"sam"`
te = fet(each):
lst.append(te)
return lst
正如@MadPhysicist在他的评论中所提到的那样,当它试图通过未定义的名称获取属性时,可能值得一提的是getattr
会做什么:你会得到一个{ {1}}例外。试试吧。放在AttributeError
此代码的某处:file1.py
但是!如果您看到getattr(file2, "foobar")
的文档,您会看到接受可选参数:getattr
。这可以像"那样读取,如果我找不到该属性,我不会给你一个错误,但default
参数"
答案 1 :(得分:0)
在file2.py
中使用字典:
my_vars = {'sam': ["33:89","21:70"],
'dan': ["34:43","23:56"]}
现在,在file1.py
:
import file2
def loopbov(myvar):
lst=[]
for each in file2.my_vars[myvar]:
te = fet(each)
lst.append(te)
return lst
def fet(vpf):
tmp=[]
# this gets me an list as an output
return tmp
f_var = loopbov("sam")