jay*_*kay 5 python pickle dill
在 python 3.7 下,当“recurse”设置设置为 True 时,dill无法 pickle对象:sympy.Float
dill.settings["recurse"] = True
import sympy
tst = sympy.Float(3.3)
dill.detect.errors(tst)
Run Code Online (Sandbox Code Playgroud)
这失败了RecursionError('maximum recursion depth exceeded in comparison')。有人知道解决方法吗?
对于 Python >=3.8,该错误消失,并且在缺少“recurse”设置的情况下也不会发生。不幸的是我需要支持Python 3.7并且被迫使用“递归”模式。
我是dill作者。我没有看到所报告的行为。也许您正在使用旧版本的 Python、dill或sympy.
Python 3.7.13 (default, May 10 2022, 11:13:40)
[Clang 10.0.1 (clang-1001.0.46.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import dill
>>> import sympy
>>> dill.__version__
'0.3.6.dev0'
>>> sympy.__version__
'1.10.1'
>>> tst = sympy.Float(3.3)
>>> dill.copy(tst)
3.30000000000000
>>> dill.settings['recurse'] = True
>>> dill.copy(tst)
3.30000000000000
>>> dill.detect.errors(tst)
>>>
Run Code Online (Sandbox Code Playgroud)
这里,copy(tst)与 相同loads(dumps(tst))。如果您的版本比我的旧,并且更新后您仍然看到相同的行为(或者它仍然存在),那么请在评论中告诉我(并在 GitHub 页面上填写问题dill)。
注意:我们即将发布版本,因此dill-0.3.6将在几天内发布。