title: UnpicklingError: NEWOBJ class argument isn't a type object
body: <p>I'm using a custom pickler that replaces any un-pickleable objects (such as sockets or files) with a string representation of them, based on the code from Shane Hathaway here:
  <a href="https://stackoverflow.com/questions/4080688/python-pickling-a-dict-with-some-unpicklable-items">Python: Pickling a dict with some unpicklable items</a></p>
  
  <p>It works most of the time, but when I try to unpickle a Django HttpResponse, I get the following error:
  UnpicklingError: NEWOBJ class argument isn't a type object</p>
  
  <p>I have no clue what the error actually means.  If it pickles okay, why should it not be able to unpickle?  I've found three references to this error on Google, but no real explanation of why it occurs or how to fix it.</p>
  
  <p>Here is my code:</p>
  
  <pre><code>from cPickle import Pickler, Unpickler, UnpicklingError
  
  class FilteredObject:
      def __init__(self, about):
          self.about = about
      def __repr__(self):
          return 'FilteredObject(%s)' % repr(self.about)
  
  class MyPickler(object):
      def __init__(self, file, protocol=2):
          pickler = Pickler(file, protocol)
          pickler.persistent_id = self.persistent_id
          self.dump = pickler.dump
          self.clear_memo = pickler.clear_memo
  
      def persistent_id(self, obj):
             if not hasattr(obj, '__getstate__') and not isinstance(obj,
          (basestring, bool, int, long, float, complex, tuple, list, set, dict)):
              return ["filtered:%s" % str(obj)]
          else:
              return None
  
  class MyUnpickler(object):
      def __init__(self, file):
          unpickler = Unpickler(file)
          unpickler.persistent_load = self.persistent_load
          self.load = unpickler.load
          self.noload = unpickler.noload
  
      def persistent_load(self, obj_id):
          if obj_id[0].startswith('filtered:'):
              return FilteredObject(obj_id[0][9:])
          else:
              raise UnpicklingError('Invalid persistent id')
  
  ###### serialize to file
  
  f = open('test.txt','wb')
  p = MyPickler(f)
  p.dump(data)
  f.close()
  
  ###### unserialize from file
  
  f = open('test.txt','rb')
  pickled_data = f.read()
  f.seek(0)
  u = MyUnpickler(f)
  data = u.load()    
  </code></pre>