-
Notifications
You must be signed in to change notification settings - Fork 40
Implicit Exception chains are not pickled. #60
Copy link
Copy link
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_eException 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.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels