处理外部库的恐慌
我是 Rust 的新手,并且已经了解 Rust 默认为恐慌而不是异常。
我有一个依赖于外部库的 rust 项目。
我已经?使用match语句处理了代码中的所有解包和's ,但我不确定如何panic通过外部库处理 a 。
在其他语言中,我只会捕获库抛出的异常。
由于 Rust 默认为 panics,库不会返回异常,但会panic中止线程的执行。
理想情况下,我希望记录并继续执行,而不是恐慌和中止。
我尝试了以下方法:
catch_unwind,但这看起来像我不能在外部库上使用的东西。log-panicscrate,它使用恐慌钩子记录恐慌。我能够记录恐慌,但不能防止中止。
回答
不要惊慌
我的意思是,这才是真正的解决方案:你必须避免恐慌,而不是在恐慌发生时试图从恐慌中恢复过来。
一些语言随意使用异常来处理阻止某些操作的条件,并在不崩溃的情况下管理它们。在 Rust 中,那些不受支持的条件是通过错误而不是恐慌来管理的。
Rust 中的恐慌是
- 最常见的错误,通常是暂时的,因为你已经
unwrap在你的第一个原型中加入了 - 或非常特殊的情况
当一个板条箱你使用恐慌时,首先检查你是否按预期使用该函数(如果你不能在不恐慌的情况下检查它是那个库中的一个错误),然后要么修复它,要么自己修复它,如果可以的话。
除了尽快崩溃之外,没有合理的方法来处理偶然的恐慌。在程序的生命周期中,恐慌并不是偶然的。
- Sorry, I always wanted to write "don't panic" in large friendly letters.