Sym*_*rog 3 scala exception-handling
确定Scala中特定库函数可以抛出的所有异常的最佳方法是什么,以便客户端代码决定是否处理异常?
Scala没有检查异常这一事实很方便,但我仍然想知道代码在使用特定函数时应该考虑的异常事件.
通常,库的Scala文档似乎不记录异常.
Scala用户如何确保他们的客户端代码考虑到库函数抛出的各种异常事件?
任何可以接受函数参数的库方法都可以抛出任何异常:
List(1).map(_ => throw new SomeExceptionIJustInvented)
Run Code Online (Sandbox Code Playgroud)
不幸的是,这意味着,在没有复杂的基于编译器的异常跟踪系统的情况下,程序员需要了解可能基于库文档和经验生成哪些异常.
如果编写对异常具有鲁棒性的代码非常重要,那么最好的方法是从相对较大的代码块中捕获所有异常.确保你只捕获Exception,而不是所有扔掉的东西,因为你可能无法做任何与内存不足错误相关的事情.所以:
try {
// Various stuff
}
catch {
case e: Exception => // Handle the case where stuff fails
}
Run Code Online (Sandbox Code Playgroud)
幸运的是,Java库明确地说明了它们将要抛出的内容,并且Scala库几乎总是抛出很少的东西,而是通过传回Option或者Either或者有其他方式通知你什么时候失败而不是抛出异常.但是,使用Java库的Scala库有时会有些不透明.(例如,如果你正在做IO,这是一个非常安全的赌注,IOException可能会被抛出.)
| 归档时间: |
|
| 查看次数: |
781 次 |
| 最近记录: |