Pyodide 中 JavaScript 端如何处理错误

问题描述 投票:0回答:1

我想在 Pyodide 中捕获 Python 端抛出的错误。要在 JavaScript 端处理它们,即在 JS 中使用 try-catch 语法,我应该如何获取异常对象?

比如出现

NameError
时,优先采用JS端检查其类型的方式。

try {
  pyodide.runPython(code)
} catch (e) {
  // Is this available?
  if (e instanceof NameError) { // Use Python's exception types
    ... // handle NameError
  } else if (e instanceof IndexError) {
    ...
  }
}
javascript error-handling pyodide
1个回答
0
投票

我正在使用 Pyodide 在浏览器中运行 Python 代码,需要在 JavaScript 端捕获并处理 Python 异常。 Pyodide 将 Python 异常转换为 JavaScript Error 对象,我想确定原始 Python 异常的类型。以下是我试图实现这一目标的方法:

在 JavaScript 的 try-catch 块中运行 Python 代码。 解析捕获的 Error 对象的消息以确定 Python 异常的类型。 这是一个示例实现:

try {
  pyodide.runPython(code);
} catch (e) {
  // e is a JavaScript Error object that contains the Python exception 
information.
  const errorMessage = e.message;

  if (errorMessage.includes('NameError')) {
    // Handle NameError
    console.log("Caught a NameError:", errorMessage);
  } else if (errorMessage.includes('IndexError')) {
    // Handle IndexError
    console.log("Caught an IndexError:", errorMessage);
  } else {
    // Handle other exceptions
    console.log("Caught an error:", errorMessage);
  }
}
    try {
  pyodide.runPython(code);
} catch (e) {
  // e is a JavaScript Error object that contains the Python exception 
information.
  const errorMessage = e.message;

  if (errorMessage.includes('NameError')) {
    // Handle NameError
    console.log("Caught a NameError:", errorMessage);
  } else if (errorMessage.includes('IndexError')) {
    // Handle IndexError
    console.log("Caught an IndexError:", errorMessage);
  } else {
    // Handle other exceptions
    console.log("Caught an error:", errorMessage);
  }
}

在此方法中:

e.message 属性包含 Python 代码生成的错误消息。 通过检查 errorMessage 是否包含某些关键字(例如“NameError”或“IndexError”),我可以识别并处理特定的 Python 异常。 请注意,此方法依赖于字符串匹配来确定 Python 异常的类型,这可能不如直接使用 Python 的异常类型那么强大,但考虑到使用 Pyodide 的限制,它可以工作。

是否有更强大的方法来使用 Pyodide 处理 JavaScript 中的 Python 异常,或者这是最好的方法?

© www.soinside.com 2019 - 2024. All rights reserved.