Ich habe eine Bibliothek für Python mit PyO3 in Rust geschrieben, aber wenn die Eingabe einer Funktion eingeschränkt ist (z. B. muss die Quadratwurzel nicht negativ sein) und diese Einschränkung nicht erfüllt ist. Ich wusste nicht, wie ich einen Fehler zurückgeben sollte (ValueError
), und es hat viel Zeit in Anspruch genommen. Ich bin sicher, dass ich in etwa einem halben Jahr wieder dasselbe googeln werde, aber ich werde zusammenfassen, was ich herausgefunden habe, weil es problematisch ist.
Ich denke, es wird so aussehen [^ 1].
[^ 1]: Dies ist ein Beispielcode. Geben Sie also nicht so etwas wie "NaN" ein. Oder "Wenn sonst", ist "return" nicht erforderlich.
#[pyfunction]
fn sqrt_rs(value: f64) -> PyResult<f64> {
if value.is_sign_negative() {
return Err(pyo3::exceptions::ValueError::py_err(
"Negativer Wert für sqrt eingegeben.Bitte geben Sie einen nicht negativen Wert ein."
);
}
Ok(value.sqrt())
}
In pyo3 :: executions
sind verschiedene andere Fehlertypen definiert. Die Verwendung ist dieselbe. Rufen Sie einfach die Funktion py_err
auf.
Auf der Python-Seite bereitgestellte Funktionen geben einen PyResult
PyO3 definiert verschiedene Python-Fehlertypen (wie "ValueError" und "TypeError") im Modul "pyo3 :: Ausnahmen". Dies sind alles verschiedene Typen auf der Rust-Seite, daher ist die Handhabung etwas umständlich. Daher bietet PyO3 eine Wrapper-Struktur "PyErr", die verschiedene Fehlertypen und deren Werte enthält. Jeder Fehlertyp wird von einer "py_err" -Funktion begleitet, die einen "PyErr" -Typ zurückgibt, der ein Argument ist. Sie können die PyErr-Instanz abrufen, die die gewünschte Fehlertypinstanz umschließt, indem Sie diesen Wert als übergeben.
Recommended Posts