rhai/doc/src/language/throw.md
2020-10-20 23:16:03 +08:00

1.2 KiB

Throw Exception on Error

{{#include ../links.md}}

All of [Engine]'s evaluation/consuming methods return Result<T, Box<rhai::EvalAltResult>> with EvalAltResult holding error information.

To deliberately return an error during an evaluation, use the throw keyword.

if some_bad_condition_has_happened {
    throw error;    // 'throw' any value as the exception
}

throw;              // defaults to '()'

Exceptions thrown via throw in the script can be captured in Rust by matching Err(Box<EvalAltResult::ErrorRuntime(value, position)>) with the exception value captured by value.

let result = engine.eval::<i64>(r#"
    let x = 42;

    if x > 0 {
        throw x;
    }
"#);

println!("{}", result);     // prints "Runtime error: 42 (line 5, position 15)"

Catch a Thrown Exception

It is possible to catch an exception instead of having it abort the evaluation of the entire script via the try ... catch statement common to many C-like languages.

try
{
    throw 42;
}
catch (err)         // 'err' captures the thrown exception value
{
    print(err);     // prints 42
}