【问题标题】:TypeError("can't pickle re.Match objects") error when pickling using dill / pickle使用 dill / pickle 进行酸洗时出现 TypeError("can't pickle re.Match objects") 错误
【发布时间】:2020-05-18 12:23:57
【问题描述】:

我似乎找不到腌制这个的方法,有人可以帮忙吗? 这是因为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 解析器实现类的对象。

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

【问题讨论】:

    标签: pickle python-multiprocessing ply dill python-re


    【解决方案1】:

    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__ 来帮助酸洗过程,这将需要您创建一个自定义类并实现此功能,这对于这种情况似乎过于复杂

    希望有所帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-14
      • 2018-07-20
      • 2018-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多