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:
@ -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:
|
||||||
|
@ -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)
|
||||||
|
Reference in New Issue
Block a user