Google Assistant运行异常:按下回车键触发StopIteration错误
解决Google Assistant Push-to-Talk示例的StopIteration报错问题
我之前碰到过完全一样的问题,这个报错的核心原因是Python 3.7+的生成器行为变更——从Python 3.7开始,官方严格禁止在生成器里直接raise StopIteration,必须用return来终止生成器,但老版本的Google Assistant gRPC示例代码(就是你报错里的audio_helpers.py)还在沿用旧写法,所以才触发了一系列连锁错误。
直接有效的修复步骤:
先找到出问题的文件,路径是:
C:\Program Files\Python37\lib\site-packages\googlesamples\assistant\grpc\audio_helpers.py如果你用的是虚拟环境,记得找虚拟环境下的对应路径,不是系统Python目录哦。
用编辑器打开这个文件,定位到
__iter__方法(大概在338行左右),原来的代码里有这么一行:raise StopIteration把这行直接替换成
return就行,修改后的代码块大概是这样:def __iter__(self): while True: chunk = self.read_chunk() if chunk is None: return # 用return替代raise StopIteration,符合Python 3.7+规范 yield chunk保存文件后重新运行push-to-talk示例,这个报错应该就彻底消失了。
补充说明:
Python 3.7引入了PEP 479规范,目的是避免生成器里的异常被误处理。原来的代码抛出StopIteration会被Python判定为错误,进而引发后续的gRPC请求迭代失败和RuntimeError。换成return后,生成器会正常终止,完全符合新的Python版本要求。
如果你不想修改系统文件,也可以试试升级Google Assistant的示例库到最新版本,新版本已经修复了这个兼容性问题:
pip install --upgrade google-assistant-sdk[samples]
内容的提问来源于stack exchange,提问作者rakhavendhar
相关产品推荐
相关产品推荐

