Skip to content

Pickle function with empty nonlocal #73

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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions