Skip to content

Regression when pickling closures #86

@pitrou

Description

@pitrou

This is on git master:

>>> import cloudpickle
>>> def f():
...:    s = {1,2}
...:    def g():
...:        return len(s)
...:    return g
...:
>>> g = f()
>>> g
<function __main__.f.<locals>.g>
>>> cloudpickle.dumps(g)
Traceback (most recent call last):
  File "<ipython-input-5-3faa44bc74aa>", line 1, in <module>
    cloudpickle.dumps(g)
  File "/home/antoine/cloudpickle/cloudpickle/cloudpickle.py", line 734, in dumps
    cp.dump(obj)
  File "/home/antoine/cloudpickle/cloudpickle/cloudpickle.py", line 146, in dump
    return Pickler.dump(self, obj)
  File "/home/antoine/miniconda3/envs/dask36/lib/python3.6/pickle.py", line 409, in dump
    self.save(obj)
  File "/home/antoine/miniconda3/envs/dask36/lib/python3.6/pickle.py", line 476, in save
    f(self, obj) # Call unbound method with explicit self
  File "/home/antoine/cloudpickle/cloudpickle/cloudpickle.py", line 267, in save_function
    self.save_function_tuple(obj)
  File "/home/antoine/cloudpickle/cloudpickle/cloudpickle.py", line 336, in save_function_tuple
    self._save_subimports(code, set(f_globals.values()) | set(closure))
TypeError: unhashable type: 'set'

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions