繁体   English   中英

scala try / catch没有捕获一些异常

[英]scala try/catch not catching some exceptions

除非try / catch不起作用,否则我认为它应该起作用,我希望能够捕获以下异常。 相反,它只是抛出NPE。

try {
  scala.io.Source.fromInputStream(null)
} catch {
  case e:Throwable => println("oh cr*p!")
}

相反,以下代码确实有效。

try {
  1/0
} catch {
  case e:Throwable => println("oh cr*p")
}

io.Source是懒惰的,因此在需要之前不评估其输入。 因此,初始化时不会抛出异常,而是在首次使用时抛出异常。 这个例子表明:

scala> class Foo(val x: io.Source)
defined class Foo

scala> new Foo(io.Source.fromInputStream(null))
res2: Foo = Foo@1c79f780

这里也不例外。 但是,当你使用它时(在这种情况下将它打印到控制台),它会抛出一个异常:

scala> res2.x
java.lang.NullPointerException
    at java.io.Reader.<init>(Reader.java:78)
    at java.io.InputStreamReader.<init>(InputStreamReader.java:129)

还有一点提示:不要捕获throwables,因为这样也会捕获StackOverflowErrorOutOfMemoryError类的东西,你不想捕获它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM