使用 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 并实施此功能,这似乎过于复杂对于这种情况
希望对您有所帮助
我似乎想不出腌制这个的方法,有人可以帮忙吗? 这是因为为 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 并实施此功能,这似乎过于复杂对于这种情况
希望对您有所帮助