所以我的问题是,当其中一个代码无法在服务器中找到该文件时,我的代码会崩溃。有没有办法在找不到文件时跳过查找过程并继续循环。 以下是我的代码:
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]))
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]))
答案 0 :(得分:11)
您需要使用try
/ except
块来处理异常。请参阅handling exceptions的Python文档。
在这种情况下,您必须使用open()
打包with
调用(以及try
阻止中的所有内容),并使用except IOError
捕获异常:
for ...
try:
with open(...
# do stuff
except IOError:
# what to do if file not found, or pass
其他信息
你真正应该做的是将外部for
循环的主体拉出一个函数。或者可能是with
的主体,进入处理打开文件的函数。无论哪种方式,减少嵌套都会使事情更具可读性,并且更容易进行这样的更改,添加try
/ except
。
实际上,您似乎在外部for
循环的每次迭代中重新打开文件,但文件名永远不会更改 - 您总是重新打开同一个文件。这是故意的吗?如果没有,你可能想重新思考你的逻辑,并将其移出循环。
第三个想法,你得到的例外是什么?是不是找不到IOError的文件?因为您正在打开文件('w'
),所以我不知道为什么你会得到那个例外。
答案 1 :(得分:1)
for index, (start, end) in enumerate(searchPFAM(fname)):
try:
newname = 'output_'+uniprotID+'-%s.txt' % index
with open(newname,'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]))
except IOError:
print 'Couldn't find file %s' % newname