From 743d17e3aa77b84a57531cd74e1daba87132f807 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Tue, 15 Sep 1998 20:25:57 +0000 Subject: In load_inst(), when instantiating an instance the old way (i.e. when there's an __getinitargs__() method), if a TypeError occurs, catch and reraise it but add info to the error about the class name being instantiated. This makes debugging a lot easier if __getinitargs__() returns something bogus (e.g. a string instead of a singleton tuple). --- Lib/pickle.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Lib/pickle.py b/Lib/pickle.py index 0fde828..a4e442a 100644 --- a/Lib/pickle.py +++ b/Lib/pickle.py @@ -23,11 +23,11 @@ Misc variables: """ -__version__ = "1.9" # Code version +__version__ = "$Revision$" # Code version from types import * from copy_reg import dispatch_table, safe_constructors -import string, marshal +import string, marshal, sys format_version = "1.2" # File format version we write compatible_formats = ["1.0", "1.1"] # Old format versions we can read @@ -465,7 +465,6 @@ def whichmodule(cls, clsname): """ if classmap.has_key(cls): return classmap[cls] - import sys for name, module in sys.modules.items(): if name != '__main__' and \ @@ -620,7 +619,11 @@ class Unpickler: # prohibited pass if not instantiated: - value = apply(klass, args) + try: + value = apply(klass, args) + except TypeError, err: + raise TypeError, "in constructor for %s: %s" % ( + klass.__name__, str(err)), sys.exc_info()[2] self.append(value) dispatch[INST] = load_inst -- cgit v0.12