Open
Description
Explicit exceptions those given with the from
syntax when raising an exception are pickled, however ones which are called with out this are not.
excepted:
def chain_exception():
try:
raise Exception('Foo')
except Exception as ex:
try:
raise Exception('Bar')
except Exception as e:
raise Exception('explict') from e
chain_exception()
Exception chain
Traceback (most recent call last):
File "<ipython-input-14-53e847eef0b4>", line 5, in chain_exception
raise Exception('Foo')
Exception: Foo
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<ipython-input-14-53e847eef0b4>", line 8, in chain_exception
raise Exception('Bar')
Exception: Bar
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/bert/.conda/envs/dask-dev/lib/python3.8/site-packages/IPython/core/interactiveshell.py", line 3343, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-14-53e847eef0b4>", line 12, in <module>
chain_exception()
File "<ipython-input-14-53e847eef0b4>", line 10, in chain_exception
raise Exception('explict') from e
Exception: explict
after pickling:
import pickle
import tblib.pickling_support
tblib.pickling_support.install()
try:
chain_exception()
except Exception as e:
pickled_e = pickle.dumps(e, protocol=pickle.HIGHEST_PROTOCOL)
raise pickled_e
Exception chain
Traceback (most recent call last):
File "<ipython-input-14-53e847eef0b4>", line 8, in chain_exception
raise Exception('Bar')
Exception: Bar
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/bert/.conda/envs/dask-dev/lib/python3.8/site-packages/IPython/core/interactiveshell.py", line 3343, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-15-269163ec6143>", line 8, in <module>
raise pickle.loads(pickled_e)
File "<ipython-input-15-269163ec6143>", line 2, in <module>
chain_exception()
File "<ipython-input-14-53e847eef0b4>", line 10, in chain_exception
raise Exception('explict') from e
Exception: explict
I believe this is simply due to the fact that __cause__
attribute is pickled but the __context__
one is not. See PEP 3134 for further details on this.
Metadata
Metadata
Assignees
Labels
No labels