Pickle problem

Michael Stenner mstenner at phy.duke.edu
Tue Sep 10 14:57:37 CEST 2002


On Tue, Sep 10, 2002 at 01:44:57PM +0100, Harvey Thomas wrote:
> Erik Price wrote:
> > 
> > On Tuesday, September 10, 2002, at 06:13  AM, Harvey Thomas wrote:
> > 
> > > I'm trying to pickle a complicated data structure which includes a 
> > > dictionary whose entries are created by (simplified):
> > >
> > > a[x] = re.compile(y).match
> > >
> > > The pickle fails, however, with the error:
> > >
> > > PicklingError: Can't pickle <built-in method match of 
> > _sre.SRE_Pattern 
> > > object at
> > >  0x00838700>: it's not found as __main__.match
> > 
> > Are you trying to store the MatchObject returned by a call to 
> > a regular 
> > expression object's match() method?  If so, it looks like you're 
> > forgetting the parens at the end of "re.compile(y).match".
> > 
> No, I haven't forgotten the parentheses. I'd like to pickle the match method of the compiled regular expression.

Are you interested in storing the "match results" or the "match
method"?  I think Erik was suggesting that you may want

a[x] = re.compile(y).match()

That will pickle the match object.  What you're doing is trying to
pickle the method (function) that gets called to return the result.

Example:

class foo:
    def bar(): return "some data"

f = foo()

pickling "f.bar" is very different from pickling "f.bar()" because
the former is a method, and the latter is a string (specifically,
"some data").

					-Michael
-- 
  Michael Stenner                       Office Phone: 919-660-2513
  Duke University, Dept. of Physics       mstenner at phy.duke.edu
  Box 90305, Durham N.C. 27708-0305




More information about the Python-list mailing list