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

开发Anki插件调用getNote时触发NotFoundError错误如何解决

错误触发原因

mw.col.find_cards() 返回的是卡片ID(cid),而mw.col.getNote() 方法要求传入的参数是笔记ID(nid),两类ID体系完全独立不互通,传入非笔记ID的参数时,后端就会抛出NotFoundError。
同时标签是直接关联到笔记实体的,使用find_cards搜索标签本身也属于冗余操作。

修复方案

将搜索卡片的逻辑替换为搜索笔记,直接获取符合条件的笔记ID即可,修改testFunction代码如下:

def testFunction() -> None:
    # 替换find_cards为find_notes,直接获取笔记ID
    note_ids = mw.col.find_notes("tag:jpzr")
    for nid in note_ids:
        note = mw.col.getNote(nid)
        # 判空避免无效请求
        if not note["Focus"].strip():
            continue
        meaning_list = return_search(note["Focus"])
        # 如需避免重复写入可先清空原有内容:note["Meaning"] = ""
        note["Meaning"] += meaning_list
        note.flush()

如果业务场景确实需要先检索卡片,再获取对应笔记,也可以通过卡片对象的nid属性拿到对应笔记ID:

def testFunction() -> None:
    card_ids = mw.col.find_cards("tag:jpzr")
    for cid in card_ids:
        card = mw.col.getCard(cid)
        note = mw.col.getNote(card.nid)
        # 后续逻辑不变
额外优化建议
  • 给requests.get添加timeout参数,同时捕获网络请求异常,避免访问Jisho失败时插件直接崩溃
  • 批量查询时添加1-2秒的请求间隔,避免触发Jisho的反爬机制被限制IP
  • 写入字段前校验笔记是否存在Focus和Meaning字段,兼容不同笔记类型的情况

内容的提问来源于stack exchange,提问作者Aaron Green

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:06:06