So my problem is that my code would crash when one of it couldn’t find the file in the server. Is there a way to skip that process of finding when there is no file found and continue through the loop.
Here is my code below:
fname = '/Volumes/database/interpro/data/'+uniprotID+'.txt'
for index, (start, end) in enumerate(searchPFAM(fname)):
with open('output_'+uniprotID+'-%s.txt' % index,'w') as fileinput:
print start, end
for item in lookup[uniprotID]:
item, start, end = map(int, (item, start, end)) #make sure that all value is int
if start <= item <= end:
print item
result = str(item - start)
fileinput.write(">{0} | at position {1} \n".format(uniprotID, result))
fileinput.write(''.join(makeList[start-1:end]))
break
else:
fileinput.write(">{0} | N/A\n".format(uniprotID))
fileinput.write(''.join(makeList[start-1:end]))
You need to handle the exception using a
try/exceptblock. See the Python docs for handling exceptions.In this case, you’d have to wrap the
open()call (and everything in thatwithblock), withtry, and catch the exception withexcept IOError:Additional info
What you really should do, is pull the body of that outer
forloop out into a function. Or maybe the body of thewith, into a function that handles the opened file. Either way, cutting down on the nesting makes things much more readable, and easier to make changes like this, adding atry/except.Actually, it appears that you are re-opening the file every iteration of the outer
forloop, but the filename never changes – you are always re-opening the same file. Is that intentional? If not, you probably want to re-think your logic, and move that outside the loop.On third thought, what is the exception you’re getting? Is it a file not found IOError? Because you’re opening the file for writing (
'w'), so I’m not sure why you would get that exception anyway.