Skip to content

Pickle function with empty nonlocal #73

@jlou2u

Description

@jlou2u

The following gives me an error. It's not a case I actually want to support, but it did take a while to figure out this was making the serialization fail.

 def test_empty_nonlocal(self):

     if False:
         bar = 100

     def foo():
         return 1 + bar or 0

     data = cloudpickle.dumps(foo)

======================================================================
ERROR: test_empty_nonlocal (tests.cloudpickle_test.CloudPickleTest)

Traceback (most recent call last):
File "/home/jlewis/workspace/cloudpickle/tests/cloudpickle_test.py", line 371, in test_empty_nonlocal
data = cloudpickle.dumps(foo)
File "/home/jlewis/workspace/cloudpickle/cloudpickle/cloudpickle.py", line 706, in dumps
cp.dump(obj)
File "/home/jlewis/workspace/cloudpickle/cloudpickle/cloudpickle.py", line 146, in dump
return Pickler.dump(self, obj)
File "/Users/jlewis/anaconda/lib/python2.7/pickle.py", line 224, in dump
self.save(obj)
File "/Users/jlewis/anaconda/lib/python2.7/pickle.py", line 286, in save
f(self, obj) # Call unbound method with explicit self
File "/home/jlewis/workspace/cloudpickle/cloudpickle/cloudpickle.py", line 270, in save_function
self.save_function_tuple(obj)
File "/home/jlewis/workspace/cloudpickle/cloudpickle/cloudpickle.py", line 305, in save_function_tuple
code, f_globals, defaults, closure, dct, base_globals = self.extract_func_data(func)
File "/home/jlewis/workspace/cloudpickle/cloudpickle/cloudpickle.py", line 374, in extract_func_data
closure = [c.cell_contents for c in func.closure] if func.closure else []
ValueError: Cell is empty

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions