Skip to content Skip to sidebar Skip to footer

How To Imitate Python 3's Raise ... From In Python 2?

Python 3 has the neat try: raise OneException('sorry') except OneException as e: # after a failed attempt of mitigation: raise AnotherException('I give up') from e syn

Solution 1:

There's a raise_from in python-future; simply install it

pip install future

and import to use

from future.utils import raise_from
# or: from six import raise_fromclassFileDatabase:
    def__init__(self, filename):
        try:
            self.file = open(filename)
        except IOError as exc:
            raise_from(DatabaseError('failed to open'), exc)

UPDATE

The compatibility package six also supports raise_from, from version 1.9 (released in 2015). It is used in the same manner as above.

Solution 2:

Instead of using six.raise_from, try to use six.reraise, as explained in this page:

http://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)

Post a Comment for "How To Imitate Python 3's Raise ... From In Python 2?"