如何在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
相关产品推荐
相关产品推荐

