diff --git a/cloudpickle/cloudpickle.py b/cloudpickle/cloudpickle.py index c89ad2aef..51f15da2f 100644 --- a/cloudpickle/cloudpickle.py +++ b/cloudpickle/cloudpickle.py @@ -43,7 +43,6 @@ from __future__ import print_function import operator -import os import io import pickle import struct @@ -188,8 +187,9 @@ def save_function(self, obj, name=None): # if func is lambda, def'ed at prompt, is in main, or is nested, then # we'll pickle the actual function object rather than simply saving a # reference (as is done in default pickler), via save_function_tuple. - if islambda(obj) or obj.__code__.co_filename == '' or themodule is None: - #print("save global", islambda(obj), obj.__code__.co_filename, modname, themodule) + if (islambda(obj) + or getattr(obj.__code__, 'co_filename', None) == '' + or themodule is None): self.save_function_tuple(obj) return else: @@ -249,7 +249,10 @@ def extract_code_globals(co): """ Find all globals names read or written to by codeblock co """ - code = co.co_code + + code = getattr(co, 'co_code', None) + if code is None: + return set() if not PY3: code = [ord(c) for c in code] names = co.co_names