Fixed the ultimate bug with embl (and genbank) parsers: raising any

exception in a python generator makes it unable to resume. So now,
exceptions are not raised but printed, then functions return None and
that's handled at higher level.
This commit is contained in:
Celine Mercier
2019-03-15 16:06:06 +01:00
parent 832f582802
commit e8090a44c9
2 changed files with 14 additions and 6 deletions

View File

@ -5,6 +5,7 @@ import os
from obitools3.apps.progress cimport ProgressBar # @UnresolvedImport from obitools3.apps.progress cimport ProgressBar # @UnresolvedImport
from obitools3.dms.view.view cimport View from obitools3.dms.view.view cimport View
from obitools3.dms.view import RollbackException
from obitools3.dms.view.typed_view.view_NUC_SEQS cimport View_NUC_SEQS from obitools3.dms.view.typed_view.view_NUC_SEQS cimport View_NUC_SEQS
from obitools3.dms.column.column cimport Column from obitools3.dms.column.column cimport Column
from obitools3.dms.obiseq cimport Nuc_Seq from obitools3.dms.obiseq cimport Nuc_Seq
@ -153,6 +154,13 @@ def run(config):
i = 0 i = 0
for entry in entries : for entry in entries :
if entry is None: # error or exception handled at lower level, not raised because Python generators can't resume after any exception is raised
if config['obi']['skiperror']:
i-=1
continue
else:
raise RollbackException("obi import error, rollbacking view", view)
pb(i) pb(i)
if NUC_SEQS_view: if NUC_SEQS_view:

View File

@ -55,11 +55,11 @@ def emblParser(bytes text):
de = _deMatcher.search(header).group() de = _deMatcher.search(header).group()
de = _cleanDe.sub(b' ', de).strip().strip(b'.') de = _cleanDe.sub(b' ', de).strip().strip(b'.')
except AttributeError,e: except Exception as e:
print('=======================================================') print("\nCould not import sequence id:", text.split()[1], "(error raised:", e, ")")
print(text) # Do not raise any Exception if you need the possibility to resume the generator
print('=======================================================') # (Python generators can't resume after any exception is raised)
raise e return None
tags = {} tags = {}
extractTaxon(ft, tags) extractTaxon(ft, tags)