Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
确定Scala函数抛出的所有可能异常_Scala_Exception Handling - Fatal编程技术网

确定Scala函数抛出的所有可能异常

确定Scala函数抛出的所有可能异常,scala,exception-handling,Scala,Exception Handling,为了让客户机代码决定是否处理异常,确定Scala中特定库函数可以引发的所有异常的最佳方法是什么 Scala没有检查异常这一事实很方便,但我仍然想知道在使用特定函数时代码应该考虑哪些可能的异常事件 通常,库的Scala文档似乎不会记录异常 Scala用户如何确保其客户端代码考虑到库函数引发的各种异常事件?没有这样的通用方法。特别是,任何非final方法都可能被重写以引发任何异常。任何可以接受函数参数的库方法都可以引发任何异常: List(1).map(_ => throw new SomeE

为了让客户机代码决定是否处理异常,确定Scala中特定库函数可以引发的所有异常的最佳方法是什么

Scala没有检查异常这一事实很方便,但我仍然想知道在使用特定函数时代码应该考虑哪些可能的异常事件

通常,库的Scala文档似乎不会记录异常


Scala用户如何确保其客户端代码考虑到库函数引发的各种异常事件?

没有这样的通用方法。特别是,任何非final方法都可能被重写以引发任何异常。

任何可以接受函数参数的库方法都可以引发任何异常:

List(1).map(_ => throw new SomeExceptionIJustInvented)
不幸的是,这意味着,在缺乏复杂的基于编译器的异常跟踪系统的情况下,由程序员根据库文档和经验来理解可能生成哪些异常

如果编写对异常具有鲁棒性的代码非常重要,那么最好的方法是从相对较大的代码块中捕获所有异常。确保只捕获
异常
,而不是所有可丢弃的内容,因为如果出现内存不足错误,您可能无法执行任何正常操作。因此:

try {
  // Various stuff
}
catch {
  case e: Exception => // Handle the case where stuff fails
}

幸运的是,Java库明确地说明了它们将抛出什么,Scala库几乎总是抛出很少的东西,而是传回
选项
或者
或者以其他方式通知您除了抛出异常之外的失败。然而,使用Java库的Scala库有时有点不透明。(例如,如果您正在执行IO,那么很有可能会抛出
IOException

仅供参考:Scala在处理前向异常方面没有任何特殊之处,Java就是!大多数编程语言都没有检查过的异常…好吧,大多数方法在必须抛出异常时会返回一个或,这样您就可以轻松地处理错误状态。我不知道这个项目的状态,但是禁止性允许您让编译器验证可以抛出哪些异常(通过分析字节码中可能的代码路径)。你可以在“谢谢”上看到Scala Days 2011的视频,回答了这个问题。我会仔细看一下。