我似乎找不到解决办法,有人可以帮忙吗? 这是因为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解析器实现类的对象进行腌制。
如果我尝试腌制该类对象而不通过它解析任何字符串,则它可以腌制。只有在我使用字符串解析一个字符串然后尝试使该类对象腌制之后,问题才会出现。
答案 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__来帮助酸洗过程,这将需要您创建一个自定义类并实现此功能,这种情况似乎过于复杂
希望有帮助