Irit Katriel <iritkatr...@gmail.com> added the comment:

> I want to known why it is

It's because Exception implements __reduce__ and that takes precedence over 
__getnewargs_ex__. You can see that with this example:

""""
import pickle

class MyException():
    def __init__(self, desc, item):
        super().__init__()
        self.desc = desc
        self.item = item

    def __getnewargs_ex__(self):
        print('called in {}.__getnewargs_ex__'.format(self.__class__.__name__))
        return (self.desc,), self.__dict__

    def __reduce__(self):
        print('called in {}.__reduce__'.format(self.__class__.__name__))
        return MyException, (self.desc, self.item),

e = MyException('testing', item='cpu')
s = pickle.dumps(e, protocol=-1)

x = pickle.loads(s)
""""

Output: called in MyException.__reduce__

----------
nosy: +iritkatriel

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue37489>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to