首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用pyo3引发异常

用pyo3引发异常
EN

Stack Overflow用户
提问于 2020-07-28 06:12:35
回答 2查看 415关注 0票数 3

如何正确地引发异常?

我试过以下几种方法:

代码语言:javascript
复制
#[pymethods]
impl Foo {
    #[new]
    fn __new__(arg1: u8, ...) -> Self {
        if arg1 > LIMIT {
            let gil = Python::acquire_gil();
            let py = gil.python();
            PyErr::new::<exceptions::ValueError, _>("Parameter arg1 has invalid value").restore(py);
        }
        Foo {...}
    }

这与如何描述这里完全相同。

当我创建一个参数值无效的Foo实例时,将使用错误文本<class 'Foo'> returned a result with an error set来代替ValueError来引发SystemError

我在Linux上每晚使用pyo3 0.11.1和Rust 1.47.0。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-28 08:01:03

您可以使用返回异常(将在python中引发)的PyResult

代码语言:javascript
复制
#[pymethods]
impl Foo {
    #[new]
    fn __new__(arg1: u8, ...) -> PyResult<Self> {
        if arg1 > LIMIT {
            Err(exceptions::PyValueError::new_err("Parameter arg1 has invalid value"))
        } else {
            Ok(Foo {...})
        }
    }
票数 2
EN

Stack Overflow用户

发布于 2020-07-28 07:16:05

注意,您链接到的示例是关于main中的错误管理的。

在这里,我相信,正如SystemError所指出的,您正在同时设置一个错误并返回一个值。由于这些显然是排他性条件(引发和返回没有意义),Python解释器出现了错误。

正如文件为ctors以及在提出例外的第一个片段之后所指出的,您应该返回一个[Py]Result,其中的Err大小写表示一个pyo3将为解释器设置的错误。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63128052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档