有没有办法在不提前检查的情况下捕获“被零除”错误?

KiY*_*ter 2 rust

如何在不提前检查的情况下捕获零除法错误?

在python中,它可以使用try..except。

num1 = 3
num2 = 0
try:
    num1 / num2
    """
        I know that it should be check before divide but I want to do 
        without check in advance.
    """
except ZeroDivisionError:
    print("Divided by zero")
Run Code Online (Sandbox Code Playgroud)

我知道检查除数更好。
但我正在寻找一种无需提前检查 Rust 的方法。
我该怎么做呢?

E_n*_*ate 5

最安全的选择是使用各种checked_div函数之一,它返回一个Option<{number}>.

fn do_calculation() -> Result<i32, &'static str> {
    let num1 = 2;
    let num2 = 0;
    let out = num1.checked_div(num2)
        .ok_or_else(|| {
            // produce some error value, using &'static str merely to reduce boilerplate
            "division by zero"
        })?;
}
Run Code Online (Sandbox Code Playgroud)

然后在被调用的站点上,将具有与 catch 子句等效的内容:

do_calculation().unwrap_or_else(|e| {
    eprintln!("Oh no! {}", e);
});
Run Code Online (Sandbox Code Playgroud)

这些函数仍然大致相当于在执行适当的除法之前检查除数是否为 0。

也可以看看:

  • 浮点类型“f32”和“f64”未实现“checked_div”。如果这个答案也给出了解决方案,那就更完整了。 (4认同)