diff --git a/Lib/pickle.py b/Lib/pickle.py index a22580b7bdc..8a079255f13 100644 --- a/Lib/pickle.py +++ b/Lib/pickle.py @@ -769,6 +769,9 @@ def load_inst(self): pass if not instantiated: try: + if not hasattr(klass, '__safe_for_unpickling__'): + raise UnpicklingError('%s is not safe for unpickling' % + klass) value = apply(klass, args) except TypeError, err: raise TypeError, "in constructor for %s: %s" % ( @@ -807,14 +810,9 @@ def load_global(self): dispatch[GLOBAL] = load_global def find_class(self, module, name): - try: - __import__(module) - mod = sys.modules[module] - klass = getattr(mod, name) - except (ImportError, KeyError, AttributeError): - raise SystemError, \ - "Failed to import class %s from module %s" % \ - (name, module) + __import__(module) + mod = sys.modules[module] + klass = getattr(mod, name) return klass def load_reduce(self):