使用莳萝/泡菜腌制时发生TypeError(“无法腌制重新匹配对象”)错误

时间:2020-05-18 12:23:57

标签: pickle python-multiprocessing ply dill re

我似乎找不到解决办法,有人可以帮忙吗? 这是因为reduce函数是为re.match编写的。

代码:

import re
x = re.match('abcd', 'abcd')
print(type(x))
print(x.__reduce_ex__(3))

输出:

<class 're.Match'>
Traceback (most recent call last):
  File "an.py", line 4, in <module>
    print(x.__reduce_ex__(3))
TypeError: can't pickle re.Match objects

我的确切问题是,在提交要解析的字符串之后,我试图对lex / yacc解析器实现类的对象进行腌制。

如果我尝试腌制该类对象而不通过它解析任何字符串,则它可以腌制。只有在我使用字符串解析一个字符串然后尝试使该类对象腌制之后,问题才会出现。

1 个答案:

答案 0 :(得分:0)

Match对象没有__getstate__和__setstate__,因此不能被腌制,整个迭代器也不能被腌制。

有关此主题的更多信息,请参见: https://docs.python.org/3/library/pickle.html#pickle-picklable

这是所需对象的进一步说明: https://docs.python.org/3/library/re.html#match-objects

另一种解决方案是实现__getstate__和__setstate__来帮助酸洗过程,这将需要您创建一个自定义类并实现此功能,这种情况似乎过于复杂

希望有帮助