处理外部库的恐慌

Handling panics of external libraries

我是 Rust 的新手,并且已经了解 Rust 默认情况下是恐慌而不是异常。

我有一个依赖外部库的 Rust 项目。

我已经使用 match 语句在我的代码中处理了所有解包和 ?,但我不确定如何通过外部库处理 panic

在其他语言中,我只会捕获库抛出的异常。

由于 Rust 默认为恐慌,库不会 return 异常而是 panic 并因此中止线程的执行。

理想情况下,我希望记录并继续执行,而不是恐慌和中止。

我试过以下方法:

不要恐慌

我的意思是,这才是真正的解决方案:您必须避免恐慌,而不是在恐慌发生时试图从中恢复。

一些语言随意使用异常来处理阻止某些操作的条件,并在不崩溃的情况下管理它们。 在 Rust 中,那些不受支持的条件是通过错误而不是恐慌来管理的。

Rust 中的恐慌是

  • 最常见的是错误,通常是暂时的,因为您在第一个原型制作中放置了 unwrap
  • 非常异常情况

正如the Book所说:

When code panics, there’s no way to recover

catch_unwind 这样的各种实用程序充其量只是为了更优雅地退出,它们不会让您的程序 运行 好像什么都没发生过一样。

当你使用 panics 的 crate 时,首先检查你是否按预期使用该函数(如果你无法检查而不恐慌那是该库中的错误),然后修复它或自己修复它如果可以的话。

除了尽快崩溃之外,没有合理的方法来处理偶然的​​恐慌。恐慌在您的程序生命周期中并非偶然。