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

如何在Pyodide中通过JavaScript捕获并处理Python端抛出的异常

在JavaScript中捕获并识别Pyodide的Python异常

要在JS端捕获Pyodide抛出的Python异常并判断类型,不能直接用e instanceof NameError这种写法(因为JS环境里没有Python的NameError构造函数),正确的做法是从Pyodide的全局对象中获取对应Python异常类,再通过异常对象的__class__属性做匹配:

操作步骤

  • 先从pyodide.globals中取出需要判断的Python异常类,比如NameError、IndexError
  • 在catch块中,先判断捕获到的是否为Pyodide的Python异常实例,再通过__class__属性和取出的异常类做全等比较

完整示例代码

// 预先获取Python端的异常类
const NameError = pyodide.globals.get("NameError");
const IndexError = pyodide.globals.get("IndexError");

try {
  pyodide.runPython(code);
} catch (e) {
  // 先区分是否为Python异常
  if (e instanceof pyodide.PyError) {
    if (e.__class__ === NameError) {
      console.log("捕获到Python的NameError:", e.message);
      // 编写NameError的处理逻辑
    } else if (e.__class__ === IndexError) {
      console.log("捕获到Python的IndexError:", e.message);
      // 编写IndexError的处理逻辑
    } else {
      console.log("捕获到其他Python异常:", e.message);
    }
  } else {
    // 处理JavaScript自身抛出的异常
    console.log("JavaScript异常:", e);
  }
}

额外说明

  • Pyodide抛出的Python异常对象自带message属性,对应Python异常的错误提示文本
  • 你也可以通过e.args获取Python异常的参数列表,和Python中except Exception as e:里的e.args完全一致

内容的提问来源于stack exchange,提问作者Roki Turner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 15:28:14