You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pattern.text.en库conjugate函数首次调用触发StopIteration错误求助

问题

使用conjugate(oldWord, tense=this_tense, person=person, number=number)转换动词过去式时,首次调用总会触发StopIteration错误,但二次调用相同参数可正常运行。处理500个句子时存在该问题,需要彻底解决以实现生产环境整洁代码,期望正常获取动词过去式。

错误详情:

Traceback (most recent call last):
  File "C:\Users\USER\PycharmProjects\zikit1\pattern\text\__init__.py", line 609, in _read
    raise StopIteration
StopIteration

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\USER\PycharmProjects\zikit1\main.py", line 130, in <module>
    tmp = change_tense.change_tense(short_res[i], 'past')
  File "C:\Users\USER\PycharmProjects\zikit1\change_tense.py", line 124, in change_tense
    x1 = conjugate(oldWord, tense=this_tense, person=person, number=number)
  File "C:\Users\USER\PycharmProjects\zikit1\pattern\text\__init__.py", line 2208, in conjugate
    b = self.lemma(verb, parse=kwargs.get("parse", True))
  File "C:\Users\USER\PycharmProjects\zikit1\pattern\text\__init__.py", line 2172, in lemma
    self.load()
  File "C:\Users\USER\PycharmProjects\zikit1\pattern\text\__init__.py", line 2127, in load
    for v in _read(self._path):
RuntimeError: generator raised StopIteration

可行解决方案

  • 预加载词库:在程序启动阶段,提前调用一次conjugate(比如用conjugate("run", tense="past")这类无业务影响的调用),触发词库加载流程。后续正式业务调用时,词库已完成加载,不会再触发生成器异常。
  • 修复pattern库的_read函数:问题根源是Python 3.7+不允许生成器内部主动抛出StopIteration,会直接转为RuntimeError。找到pattern/text/__init__.py中_read函数的raise StopIteration代码,替换为return,让生成器自然结束。
  • 添加异常捕获重试:封装conjugate函数,首次调用失败时自动重试一次,无需修改库源码:
    def safe_conjugate(oldWord, **kwargs):
        try:
            return conjugate(oldWord, **kwargs)
        except RuntimeError:
            return conjugate(oldWord, **kwargs)
    
    业务代码中直接使用safe_conjugate替代原函数即可。
  • 升级或替换库:检查pattern库是否有新版本,新版本可能已修复该兼容问题;若无法升级,可替换为pyinflect、nltk等适配Python 3.7+的动词变位库。

内容的提问来源于stack exchange,提问作者Tomer Vazana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 22:05:26