异常处理并在 python 中继续 for 循环
Posted
技术标签:
【中文标题】异常处理并在 python 中继续 for 循环【英文标题】:Exception handling and continuing with a for loop in python 【发布时间】:2014-11-13 15:56:50 【问题描述】:我有以下代码:
import Bio
from bioservices import KEGGParser, UniProt, QuickGO
#start a new method of my custom 'Retrieve_Data' class
def locate_common_GO(self,list_of_genes,GO_term):
#initialize variables and classes
q = QuickGO()
a = Retrieve_Data()
b=[]
使用(自定义方法)hugo2uniprot
获取 uniprot IDS
for i in range(0,len(list_of_genes)):
b.append(a.hugo2uniprot(list_of_genes[i],'hsa'))
print 'Gene: \t UniProtID: '.format(list_of_genes[i],b[i])
搜索 GO 术语(使用 bioservices
'QuickGO
)并存储为字典
GO_dict =
q = QuickGO()
我拥有的一些大型基因名称列表没有返回任何命中。
这些会导致我想要处理一个AttributeError
,然后转到列表中的下一个项目。当前代码返回错误:
AttributeError: 'int' 对象没有属性 'split'。
错误源于bioservices
模块(所以当我调用q.Annotation
时)
for i in range(len(b)):
try:
GO_dict[list_of_genes[i]] = q.Annotation(protein=b[i], frmt="tsv", _with=True,tax=9606, source="UniProt", col="goName")
except AttributeError:
continue
# The rest of this code is irrelevant to my problem but I've included it for completeness:
# Essentially it is designed to locate specific keywords in the results of the above code and return the gene name that they came from.
keys = GO_dict.keys()
matches = []
for gene in range(0,len(keys)):
if GO_term in GO_dict[keys[gene]].splitlines():
matches.append(keys[gene])
return matches
是否有人对异常处理工作有任何建议,以便完成对指定列表的迭代而不是停止脚本?
【问题讨论】:
AttributeError
的详细信息是什么?“不起作用”是什么意思?此外,使用 range()
而不是直接循环遍历列表是 Python 中的代码异味。也许你想要enumerate()
,所以你有一个索引计数器?
它是否引发了除AttributeError
之外的异常?是什么导致脚本停止执行?更多信息会很有用。
@Tom - 你是想告诉我 enumerate() 会和 range(n,m) 做同样的工作吗?
@slurms - 我已编辑问题以尝试提供更多详细信息
也许它在第一个循环中失败了(使用(自定义方法)hugo2uniprot 获取 uniprot IDS)。它会通过所有基因吗?它不应该在第二个失败,因为循环明确捕获AttributeError
...
【参考方案1】:
好的,我刚刚意识到问题在于错误来自不同的代码位......所以我基本上没有尝试处理任何事情。我现在已经解决了,感谢所有回复的人。
【讨论】:
以上是关于异常处理并在 python 中继续 for 循环的主要内容,如果未能解决你的问题,请参考以下文章
减少计数值以重复循环循环不起作用。 python中的for循环有一个异常处理程序,它有一个continue语句