简体   繁体   中英

Exception handling and continuing with a for loop in python

I have the following code:

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=[]

Get the uniprot IDS using (custom method) hugo2uniprot

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])
    

Search for GO terms (using bioservices ' QuickGO ) and store as dictionary

GO_dict = {}
q = QuickGO()

Some of the large list of gene names that I have do not return any hits. These cause an AttributeError that I want to handle then move on to the next item in the list. The current code returns the error:

AttributeError: 'int' object has no attribute 'split'.

The error originates within the bioservices module (so when I'm calling 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

Does anybody have any suggestions to get the exception handling working so it finishes iterating over the specified list instead of halting the script?

Okay I've just realized that the problem is that the error was coming from a different bit of code... So I was essentially trying to handle nothing. I've fixed it now, thanks to all those who responded.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM