使用 dill / pickle 进行酸洗时出现 TypeError("can't pickle re.Match objects") 错误

TypeError("can't pickle re.Match objects") error when pickling using dill / pickle

我似乎想不出腌制这个的方法,有人可以帮忙吗? 这是因为为 re.match.

编写 reduce 函数的方式

代码:

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 解析器实现 class 提交要解析的字符串后,我试图 pickle 一个对象。

如果我尝试 pickle class 对象而不通过它解析任何字符串,它能够 pickle。只有在我使用它解析字符串然后尝试 pickle class 对象后才会出现问题。

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

可在此处找到有关此主题的更多信息: https://docs.python.org/3/library/pickle.html#pickle-picklable

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

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

希望对您有所帮助