Skip to content

Commit 1105da1

Browse files
pitrourgbkrk
authored andcommitted
Fix #129: do not silence RuntimeError in dump() (#140)
1 parent 216e841 commit 1105da1

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

cloudpickle/cloudpickle.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,8 @@ def dump(self, obj):
262262
if 'recursion' in e.args[0]:
263263
msg = """Could not pickle object as excessively deep recursion required."""
264264
raise pickle.PicklingError(msg)
265+
else:
266+
raise
265267

266268
def save_memoryview(self, obj):
267269
self.save(obj.tobytes())

tests/cloudpickle_test.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,15 @@
5050
HAVE_WEAKSET = hasattr(weakref, 'WeakSet')
5151

5252

53+
class RaiserOnPickle(object):
54+
55+
def __init__(self, exc):
56+
self.exc = exc
57+
58+
def __reduce__(self):
59+
raise self.exc
60+
61+
5362
def pickle_depickle(obj):
5463
"""Helper function to test whether object pickled with cloudpickle can be
5564
depickled with pickle
@@ -820,6 +829,12 @@ def test_function_pickle_compat_0_4_1(self):
820829
b'\x14NtR.')
821830
self.assertEquals(42, cloudpickle.loads(pickled)(42))
822831

832+
def test_pickle_reraise(self):
833+
for exc_type in [Exception, ValueError, TypeError, RuntimeError]:
834+
obj = RaiserOnPickle(exc_type("foo"))
835+
with pytest.raises((exc_type, pickle.PicklingError)):
836+
cloudpickle.dumps(obj)
837+
823838

824839
if __name__ == '__main__':
825840
unittest.main()

0 commit comments

Comments
 (0)