469,913 Members | 2,683 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,913 developers. It's quick & easy.

can't pickle instancemethod objects

Pickling an instance of a class, gives "can't pickle instancemethod
objects". What does this mean? How do I find the class method creating
the problem?

Jul 9 '06 #1
6 11861
On Sun, 09 Jul 2006 05:45:27 -0700, Jim Lewis wrote:
Pickling an instance of a class, gives "can't pickle instancemethod
objects". What does this mean?
It means you can't pickle instance methods.
How do I find the class method creating the problem?
How about you post the complete stack trace of the exception? Chances are
it will contain much useful information.
--
Steven.

Jul 9 '06 #2
How about you post the complete stack trace of the exception?

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\program files\python\lib\lib-tk\Tkinter.py", line 1345, in
__call__
return self.func(*args)
File "C:\Public\world.py", line 1832, in BtnGo
DoBtnGo()
File "C:\Public\world.py", line 1812, in DoBtnGo
if DoPickle: SavePickle ()
File "C:\Public\world.py", line 1817, in SavePickle
pickle.dump (pop,f)
File "C:\program files\python\lib\pickle.py", line 1382, in dump
Pickler(file, protocol, bin).dump(obj)
File "C:\program files\python\lib\pickle.py", line 231, in dump
self.save(obj)
File "C:\program files\python\lib\pickle.py", line 293, in save
f(self, obj) # Call unbound method with explicit self
File "C:\program files\python\lib\pickle.py", line 739, in save_inst
save(stuff)
File "C:\program files\python\lib\pickle.py", line 293, in save
f(self, obj) # Call unbound method with explicit self
File "C:\program files\python\lib\pickle.py", line 663, in save_dict
self._batch_setitems(obj.iteritems())
File "C:\program files\python\lib\pickle.py", line 677, in
_batch_setitems
save(v)
File "C:\program files\python\lib\pickle.py", line 293, in save
f(self, obj) # Call unbound method with explicit self
File "C:\program files\python\lib\pickle.py", line 614, in save_list
self._batch_appends(iter(obj))
File "C:\program files\python\lib\pickle.py", line 629, in
_batch_appends
save(x)
File "C:\program files\python\lib\pickle.py", line 293, in save
f(self, obj) # Call unbound method with explicit self
File "C:\program files\python\lib\pickle.py", line 739, in save_inst
save(stuff)
File "C:\program files\python\lib\pickle.py", line 293, in save
f(self, obj) # Call unbound method with explicit self
File "C:\program files\python\lib\pickle.py", line 663, in save_dict
self._batch_setitems(obj.iteritems())
File "C:\program files\python\lib\pickle.py", line 677, in
_batch_setitems
save(v)
File "C:\program files\python\lib\pickle.py", line 313, in save
rv = reduce(self.proto)
File "C:\program files\python\lib\copy_reg.py", line 69, in
_reduce_ex
raise TypeError, "can't pickle %s objects" % base.__name__
TypeError: can't pickle instancemethod objects

Jul 9 '06 #3
On Sun, 09 Jul 2006 07:06:25 -0700, Jim Lewis wrote:
>How about you post the complete stack trace of the exception?

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\program files\python\lib\lib-tk\Tkinter.py", line 1345, in
__call__
return self.func(*args)
File "C:\Public\world.py", line 1832, in BtnGo
DoBtnGo()
File "C:\Public\world.py", line 1812, in DoBtnGo
if DoPickle: SavePickle ()
File "C:\Public\world.py", line 1817, in SavePickle
pickle.dump (pop,f)
I'd suggest that "pop" could be your culprit. At least, that's where I'd
start looking. What is pop? A function or an instance method?

I can't reproduce your error exactly -- the closest I get is "TypeError:
can't pickle function objects" when I try to pickle a method. Possibly
that's just a change in error message, which is not guaranteed to be
constant across Python versions.

--
Steven.

Jul 9 '06 #4
I'd suggest that "pop" could be your culprit. ...What is pop? A function or an instance method?

Neither. pop is an instance of a class, like:
class X:
...
pop = X ()

pop surely is the culprit but it has arrays of objects, etc., and I
don't know what to look for.

Jul 9 '06 #5
On Sun, 09 Jul 2006 08:39:29 -0700, Jim Lewis wrote:
>I'd suggest that "pop" could be your culprit. ...What is pop? A function or an instance method?

Neither. pop is an instance of a class, like:
class X:
...
pop = X ()

pop surely is the culprit but it has arrays of objects, etc., and I
don't know what to look for.
I'd start by looking for an attribute of pop that holds a reference to
some function or method. E.g. something like this:

class X():
def method(self):
pass
def __init__(self):
self.L = [1, "a", X.method] # note the lack of ()s

pop = X()

Otherwise, I'm working blind without knowing more about your class.

Here's a thought: comment out every attribute in your class, and then try
pickling it. If it succeeds, uncomment just *one* attribute, and try
pickling again. Repeat until pickling fails.
--
Steven.

Jul 9 '06 #6
Here's a thought: comment out every attribute in your class, and then try
pickling it. If it succeeds, uncomment just *one* attribute, and try
pickling again. Repeat until pickling fails.
Was trying to avoid that but you motivated me to do so and now I found
the probem.

In a utility routine I had:
obj.act = act
ActionSucceded = obj.act()

Had to add:
obj.act = None

Thanks :-)

Jul 9 '06 #7

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

2 posts views Thread by Jane Austine | last post: by
3 posts views Thread by Guy Lateur | last post: by
8 posts views Thread by Murali Inguva | last post: by
2 posts views Thread by Michele Simionato | last post: by
10 posts views Thread by est | last post: by
reply views Thread by Salome Sato | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.