【发布时间】:2018-07-02 18:13:15
【问题描述】:
当知道某段代码可能会抛出错误时,我们使用try/catch 块来忽略此类错误并继续。当错误不是那么重要但也许我们只想记录它时会这样做:
try{
int i = 1/0;
} catch( ArithmeticException e){
System.out.println("Encountered an error but would proceed.");
}
x = y;
Java 中的这种构造会继续执行x = y;。
我可以使用match 来执行此操作或任何其他构造吗?
我确实看到了一个try! 宏,但如果方法的返回类型为Result 时出现错误,它可能会返回。
我想在 UT 中使用这样的构造,以确保它即使在发生错误后也能继续运行。
【问题讨论】:
-
也许它会返回——我推荐阅读the documentation for functions, macros, and types that you find。他们投入了大量时间和精力,涵盖了许多基本问题。
-
感谢您向我指出@Shepmaster 的资源。但我已经通过了它们。在我看来,所有错误处理变体仅在返回 Result 类型的情况下才有效。但我希望处理一些与上面提到的 try/catch 非常相似的情况。我的函数返回一个值而不是 Result 或 Option 类型,但可能会出现恐慌,这是我想忽略的。
-
可以使用catch_unwind,但不推荐。 Docs "不建议将此函数用于一般的 try/catch 机制。Result 类型更适合用于经常失败的函数。"
-
我认为有人对您的问题投反对票的原因是,您不应该“丢弃”错误。正确处理它(您可以使用
expect执行此操作)或返回它,以便调用者可以自己处理错误。 -
是的,感谢@hellow 指出。但是在 UT 中,我愿意在无论如何都有嘲笑和解决问题的地方这样做。我什至可能继续在 catch 块中断言,但不想停止 UT 的进程。
标签: rust