Python 在一个变量中存储2个值?
我想知道,有没有一种方法可以在我的main方法上存储开始值和结束值。我尝试这样做,但它给我错误:Python 在一个变量中存储2个值?,python,store,Python,Store,我想知道,有没有一种方法可以在我的main方法上存储开始值和结束值。我尝试这样做,但它给我错误: def searchM(): fileAddress = '/database/pro/data/'+ID+'.txt' with open(fileAddress,'rb') as f: root = etree.parse(f) for lcn in root.xpath("/protein/match[@dbname='M']/lcn")
def searchM():
fileAddress = '/database/pro/data/'+ID+'.txt'
with open(fileAddress,'rb') as f:
root = etree.parse(f)
for lcn in root.xpath("/protein/match[@dbname='M']/lcn")
start = int(lcn.get("start"))#if it is PFAM then look for start value
end = int(lcn.get("end"))#if it is PFAM then also look for end value
return "%s, %s" % (start, end,)
values = searchM()
(start, end,) = values
错误消息为UnboundLocalError:赋值前引用的局部变量“start”您遇到的错误是由于
start
和end
变量引起的。尝试先初始化它们,使它们存在于中,即使未设置值
此外,您正在尝试创建并返回一个字符串,然后将其解压为两个不同的变量
请尝试以下操作:
def searchM():
fileAddress = '/database/pro/data/%s.txt' % ID
start = None
end = None
with open(fileAddress,'rb') as f:
root = etree.parse(f)
for lcn in root.xpath("/protein/match[@dbname='M']/lcn"):
start = int(lcn.get("start")) #if it is PFAM then look for start value
end = int(lcn.get("end")) #if it is PFAM then also look for end value
return start, end
(start, end) = searchM()
您遇到的错误是由于
start
和end
变量引起的。尝试先初始化它们,使它们存在于中,即使未设置值
此外,您正在尝试创建并返回一个字符串,然后将其解压为两个不同的变量
请尝试以下操作:
def searchM():
fileAddress = '/database/pro/data/%s.txt' % ID
start = None
end = None
with open(fileAddress,'rb') as f:
root = etree.parse(f)
for lcn in root.xpath("/protein/match[@dbname='M']/lcn"):
start = int(lcn.get("start")) #if it is PFAM then look for start value
end = int(lcn.get("end")) #if it is PFAM then also look for end value
return start, end
(start, end) = searchM()
如果未找到
开始
,结束
的值,则需要提供这些值:
for lcn in root.xpath("/protein/match[@dbname='M']/lcn"):
start = int(lcn.get("start"))
end = int(lcn.get("end"))
break
else: # not found
start = end = None
如果未找到
开始
,结束
的值,则需要提供这些值:
for lcn in root.xpath("/protein/match[@dbname='M']/lcn"):
start = int(lcn.get("start"))
end = int(lcn.get("end"))
break
else: # not found
start = end = None
这行代码:
返回“%s,%s%”(开始,结束)
在未分配开始
的情况下执行。现在已经结束了。即使您修复了它,(开始、结束)=值
也不会起作用。您不能将字符串解压成两个变量。@DavidHeffernan我应该怎么做才能得到这两个值?好吧,只需在元组中返回它们:return(start,end)
。然后像这样解包:(开始,结束)=searchM()
。显然,您需要确保start
和end
已分配。@DavidHeffernan非常感谢您返回start,end
。注意:您不需要括号(本例中逗号创建元组)这行代码:返回“%s,%s%”(开始,结束),
在未分配开始
的情况下执行。现在已经结束了。即使您修复了它,(开始、结束)=值
也不会起作用。您不能将字符串解压成两个变量。@DavidHeffernan我应该怎么做才能得到这两个值?好吧,只需在元组中返回它们:return(start,end)
。然后像这样解包:(开始,结束)=searchM()
。显然,您需要确保start
和end
已分配。@DavidHeffernan非常感谢您返回start,end
。请注意,您不需要括号(在本例中,逗号创建元组),我可以使用它调用另一个方法的开始值和结束值吗?使用values=searchM()
。(start,end,)=values
,如何在另一个方法上调用这些起始值和结束值。尽管不需要像您当前所做的那样,首先将返回值分配给变量。您可以简单地将结果返回到所需的变量:(start,end)=searchM()
是否有办法将start=''和end=''作为int而不是字符串,因为我稍后编译整个代码时使用list[start]。编译器不让我这样做,因为这是一个字符串,将它们初始化为start=0
和end=0
没有冲突;如果更改名称,则会出现相同的错误。如果“not found”(未找到)是有效索引,则返回0,0是不正确的,例如,如果lcn.get()可以返回0,那么我是否能够使用该方法调用另一个方法的开始值和结束值?使用values=searchM()
。(start,end,)=values
,如何在另一个方法上调用这些起始值和结束值。尽管不需要像您当前所做的那样,首先将返回值分配给变量。您可以简单地将结果返回到所需的变量:(start,end)=searchM()
是否有办法将start=''和end=''作为int而不是字符串,因为我稍后编译整个代码时使用list[start]。编译器不让我这样做,因为这是一个字符串,将它们初始化为start=0
和end=0
没有冲突;如果更改名称,则会出现相同的错误。如果“not found”(未找到)是有效的索引,则返回0,0是不正确的,例如,如果lcn.get()可以返回0,它表达了作者的意图,据我所知,您可能在这一点上是正确的,但我只是希望它显式返回stated@J.F.Sebastian非常感谢你。我可以再问你一个问题吗?我需要在另一个方法上使用开始值和结束值来创建列表。但它告诉我,值不能是NoneType或str。我该如何解决这个问题?@ChadD:None
值表示xpath返回空列表,即未找到任何内容。您应该做什么取决于该列表将如何在以后的代码中使用。@DavidHeffernan:我同意。谢谢你提到它,它表达了作者的意图,据我所知,你很可能是对的,但我只是想明确地表达出来stated@J.F.Sebastian非常感谢你。我可以再问你一个问题吗?我需要在另一个方法上使用开始值和结束值来创建列表。但它告诉我,值不能是NoneType或str。我该如何解决这个问题?@ChadD:None
值表示xpath返回空列表,即未找到任何内容。您应该做什么取决于该列表将如何在以后的代码中使用。@DavidHeffernan:我同意。谢谢你提及此事