I am using `rss2email` for converting a number of RSS feeds into mail for easier consumption. That is, I *was* using it because it broke in a horrible way today: On every run, it only gives me this backtrace:

```
Traceback (most recent call last):
  File "/usr/share/rss2email/rss2email.py", line 740, in <module>
    elif action == "list": list()
  File "/usr/share/rss2email/rss2email.py", line 681, in list
    feeds, feedfileObject = load(lock=0)
  File "/usr/share/rss2email/rss2email.py", line 422, in load
    feeds = pickle.load(feedfileObject)
TypeError: ("'str' object is not callable", 'sxOYAAuyzSx0WqN3BVPjE+6pgPU', ((2009, 3, 19, 1, 19, 31, 3, 78, 0), {}))

```

The only helpful fact that I have been able to construct from this backtrace is that the file `~/.rss2email/feeds.dat` in which `rss2email` keeps all its configuration and runtime state is somehow broken. Apparently, `rss2email` reads its state and dumps it back using `cPickle` on every run.

I have even found the line containing that `'sxOYAAuyzSx0WqN3BVPjE+6pgPU'`string mentioned above in the giant (>12MB) `feeds.dat` file. To my untrained eye, the dump does not appear to be truncated or otherwise damaged.

What approaches could I try in order to reconstruct the file?

The Python version is 2.5.4 on a Debian/unstable system.

**EDIT**

Peter Gibson and J.F. Sebastian have suggested directly loading from the
pickle file and I had tried that before. Apparently, a `Feed` class
that is defined in `rss2email.py` is needed, so here's my script:

```
#!/usr/bin/python

import sys
# import pickle
import cPickle as pickle
sys.path.insert(0,"/usr/share/rss2email")
from rss2email import Feed

feedfile = open("feeds.dat", 'rb')
feeds = pickle.load(feedfile)

```

The "plain" pickle variant produces the following traceback:

```
Traceback (most recent call last):
  File "./r2e-rescue.py", line 8, in <module>
    feeds = pickle.load(feedfile)
  File "/usr/lib/python2.5/pickle.py", line 1370, in load
    return Unpickler(file).load()
  File "/usr/lib/python2.5/pickle.py", line 858, in load
    dispatch[key](self)
  File "/usr/lib/python2.5/pickle.py", line 1133, in load_reduce
    value = func(*args)
TypeError: 'str' object is not callable

```

The `cPickle` variant produces essentially the same thing as calling
`r2e` itself:

```
Traceback (most recent call last):
  File "./r2e-rescue.py", line 10, in <module>
    feeds = pickle.load(feedfile)
TypeError: ("'str' object is not callable", 'sxOYAAuyzSx0WqN3BVPjE+6pgPU', ((2009, 3, 19, 1, 19, 31, 3, 78, 0), {}))

```

**EDIT 2**

Following J.F. Sebastian's suggestion around putting "printf
debugging" into `Feed.__setstate__` into my test script, these are the
last few lines before Python bails out.

```
          u'http:/com/news.ars/post/20080924-everyone-declares-victory-in-smutfree-wireless-broadband-test.html': u'http:/com/news.ars/post/20080924-everyone-declares-victory-in-smutfree-wireless-broadband-test.html'},
 'to': None,
 'url': 'http://arstechnica.com/'}
Traceback (most recent call last):
  File "./r2e-rescue.py", line 23, in ?
    feeds = pickle.load(feedfile)
TypeError: ("'str' object is not callable", 'sxOYAAuyzSx0WqN3BVPjE+6pgPU', ((2009, 3, 19, 1, 19, 31, 3, 78, 0), {}))

```

The same thing happens on a Debian/etch box using python 2.4.4-2.