python 2.7 - python3 - ¿Cómo imitar el aumento de Python 3 desde Python 2?
python search in html (2)
En lugar de usar six.raise_from, intente usar six.reraise, como se explica en esta página:
python-future.org/compatible_idioms.html
from six import reraise as raise_
# or from future.utils import raise_
traceback = sys.exc_info()[2]
raise_(ValueError, "dodgy value", traceback)
Python 3 tiene el orden
try:
raise OneException(''sorry'')
except OneException as e:
# after a failed attempt of mitigation:
raise AnotherException(''I give up'') from e
sintaxis que permite generar una excepción de seguimiento sin perder el contexto. La mejor analogía que podría encontrar en Python 2 es
raise AnotherException((e,''I give up'')), None, sys.exc_info()[2]
donde (e,'''')
es un truco feo para incluir el nombre de la excepción original en el mensaje. ¿Pero no hay una mejor manera?
Hay un raise_from
en python-future ; simplemente instálalo
pip install future
e importar para usar
from future.utils import raise_from
# or: from six import raise_from
class FileDatabase:
def __init__(self, filename):
try:
self.file = open(filename)
except IOError as exc:
raise_from(DatabaseError(''failed to open''), exc)
ACTUALIZAR
El paquete de compatibilidad six también admite raise_from
, desde la versión 1.9 (lanzado en 2015). Se utiliza de la misma manera que anteriormente.