我一直在开发一个聊天机器人。我已经在我的bot中大量使用了nltk.chat
。但是我想给这些对添加更多的特性,而不是默认的特性。当我尝试添加新的一对时,我得到了一个错误。你知道吗
alex=Chat(pair,reflections)
File "/usr/local/lib/python2.7/dist-packages/nltk/chat/util.py", in __init__
self._pairs = [(re.compile(x, re.IGNORECASE),y) for (x,y) in pairs]
ValueError: too many values to unpack
我的代码:
pair=(
(r'test (.*)',('a','b'))
)
你的一对正在失去你想要的结构,例如:
与此相同:
其中第一个元素是
'test (.*)'
,第二个元素是('a', 'b')
。你知道吗基本上,向元组结构添加括号并不意味着要嵌套它。为了达到您的目的,您应该在元组的定义中明确说明。如果将
pair
初始化更改为:(注意最后一个右括号前的逗号)
现在你的迭代可以工作了。因为第一个元素是
('test (.*)', ('a', 'b'))
,而不仅仅是字符串test (.*)
希望这能解释错误的原因。你知道吗
公认的答案是关于问题的根源的,但它忽略了一个重要的细节:Python风格要求您use tuples only for collections in which each element has a specific role.对于未区分的集合,使用
list
(方括号)。在列表pair
中传递的每个元组都是一对(<regexp>, <data>)
,因此正确地写为tuple
。但是pair
本身就是这样一个元组的集合,应该写成一个列表,而不是元组。另外,列表括号是明确的,当列表只有一个元素时,您不需要记住添加逗号:相关问题 更多 >
编程相关推荐