In the general case, it appears some of python's internals attempt to call special methods with a try/except block. If the method does not exist an AttributeError is raised, and then it handles it appropriately. (This is how `hasattr` works [[src](http://docs.python.org/2/library/functions.html#hasattr)].)

In this particular case, pickle was testing if [__getnewargs__](http://docs.python.org/2/library/pickle.html#object.__getnewargs__) was an attribute and, instead of an AttributeError, `None` was returned which is not callable. The problem was exacerbated by the uninformative traceback from pickle.