异常处理并在 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 循环的主要内容,如果未能解决你的问题,请参考以下文章

java中异常处理

减少计数值以重复循环循环不起作用。 python中的for循环有一个异常处理程序,它有一个continue语句

Python-异常处理

python 双层for循环,在第二层的for循环中的else中的continue,会退出到第一层for循环继续执行

for循环中未处理的异常

Java 异常处理和循环继续