当我停在这行代码上时,我正在查看我的代码,以便最后一次搜索异常:
var list: Array[String] = Source.fromFile(this.Path).getLines.toArray
我搜索了scala-lang的文档,但似乎该行的所有方法都没有抛出任何类型的ioException
...
怎么可能?
修改
try {
var list: Array[String] = Source.fromFile("").getLines.toArray
}
catch {
case ex:Exception => println(ex.getMessage)
}
没有打印任何东西,为什么?
答案 0 :(得分:3)
javac强制执行检查异常,JVM并不真正了解它们。与Java相反,Scala不关心已检查的异常。
例如,查看Source,您将不会注意到任何处理异常的代码。在旧的Java中不可能的东西,这需要try
/ catch
或throws
条款。
尽管如此,Scala库作者可能仍然希望确保Java用户检查这些异常,因此有@throws注释,它允许您声明方法可能抛出异常,就像{{ 1}} Java子句。请务必记住throws
仅供Java使用。
您可能还想查看scala.util.control.Exception。它包含处理异常的各种好东西。
答案 1 :(得分:1)
Source.fromFile
调用java.io.FileInputStream.open
,如果您为其提供不存在的文件,则会调出FileNotFoundException
。
Source.fromFile
没有发现这一点,因此会在您的代码中看到它。
我怀疑java.io
包中可能存在的许多其他异常同样未处理,但显然没有记录。