gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:36:07 25 4
gpt4 key购买 nike

除非 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

这里也不异常(exception)。但是,一旦您使用它(在本例中是将其打印到控制台),它就会抛出异常:

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

还有一个小提示:不要捕获 throwable,因为这也会捕获诸如 StackOverflowErrorOutOfMemoryError 等您不希望被捕获的情况。

关于scala try/catch 没有捕获一些异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16230748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com