gpt4 book ai didi

python - 在 Python 3.5.1 中酸洗 ParseResult 时出错

转载 作者:行者123 更新时间:2023-12-01 04:08:51 30 4
gpt4 key购买 nike

我的测试代码可以在 Python 2.7.11 中运行,但在 Python 3.5.1 中失败:

import pyparsing as pp
import pickle

class Greeting():
def __init__(self, toks):
self.salutation = toks[0]
self.greetee = toks[1]

word = pp.Word(pp.alphas+"'.")
salutation = pp.OneOrMore(word)
comma = pp.Literal(",")
greetee = pp.OneOrMore(word)
endpunc = pp.oneOf("! ?")
greeting = salutation + pp.Suppress(comma) + greetee + pp.Suppress(endpunc)
greeting.setParseAction(Greeting)

string = 'Good morning, Miss Crabtree!'

g = greeting.parseString(string)

pkl = 'test .pkl'
pickle.dump(g, open(pkl, 'wb'))
pickle.load(open(pkl, 'rb'))

错误信息如下:

Traceback (most recent call last):
File "C:/Users/Arne/parser/test.py", line 23, in <module>
pickle.load(open(pkl, 'rb'))
TypeError: __new__() missing 1 required positional argument: 'toklist'

__new__() 指的是 pyparsing.ParseResults.__new__(cls, toklist, name=None, asList=True, modal=True )

在 Python 3.5.1 中,通常仍然可以 pickle 由 pyparsing 返回的对象吗?或者发生了一些变化?

有人可以提供一个使用 picklepyparsing 2.0.7 的简短代码示例吗?

我的真实语法需要几分钟来解析,所以我真的很高兴能够在进一步处理之前存储结果。

最佳答案

此操作因 protocol=2 失败(pickle.dump 的可选第三个参数),但如果您使用 pickle protocol = 0 或1. 在Python 2.7.10上,0是默认协议(protocol)。在 Python 3.5 上,pickle 有协议(protocol) 0-4,同样,pickling ParseResults 仅适用于协议(protocol) 0 和 1。但在 Py3.5 中,默认协议(protocol)已更改为 3。您现在可以通过指定协议(protocol)来解决此问题0 或 1。

有关 pickle 协议(protocol)的更多信息,请访问 https://docs.python.org/3/library/pickle.html?highlight=pickle#data-stream-format

关于python - 在 Python 3.5.1 中酸洗 ParseResult 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35243105/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com