我的代码抛出例外 scala.util.control.BreakControl
,但我不知道为什么。有人知道吗?
我使用的一些地方breakable
and break
,但我不知道为什么会导致这个异常。
片段1
breakable {
for (quaOfLine <- dataOfLine) {
try {
// ... some other code
if (judgeTime(jsonQua.getInt("startTime")) == judgeTime(jsonLine.getInt("startTime"))) {
// ... some other code
if (quaRRIDs.length / RRIDs.length.toFloat >= 0.8 || quaRRIDs.length / RRIDs.length.toFloat <= 1.2) {
var count = 0
breakable {
for (rrid <- RRIDs) {
for (quaRRID <- quaRRIDs) {
if (rrid == quaRRID) {
count += 1
break //break
}
}
}
}
if (count / RRIDs.length.toFloat >= 0.8) {
sameLine = qualifier + "::" + value
break // break
}
}
}
} catch {
case e: Throwable => e.printStackTrace
}
}
}
片段2
breakable {
for (quaOfDest <- dataOfDest) {
try {
val qualifier = quaOfDest.getString("qualifier")
val value = quaOfDest.getString("value")
val jsonQua = new JSONObject(value)
val (quaSLon, quaSLat, quaELon, quaELat) = getSELonLat(jsonQua)
if (jsonQua.getInt("timeBucket").toString == judgeTime(jsonLine.getInt("startTime"))) {
someDest = qualifier + "::" + value
break //break
}
} catch {
case e: Throwable => e.printStackTrace
}
}
}
scala.util.control.BreakControl
被方法抛出scala.util.control.Breaks.break
。它用于模拟break
来自 Java 的声明。它的使用方式如下:
import scala.util.control.Breaks.{break, breakable}
breakable {
for(i <- 1 until 10) {
println(i)
if(i > 5) break
}
}
BreakControl
是一个私有类,所以通常它不会被其他任何东西抛出break
.
这也意味着在一个breakable
阻止你不应该抓住的BreakControl
你自己。你break
里面一个try
阻止然后捕获所有Throwables
并打印它们。BreakControl
is a Throwable
所以它会被你抓住而不是被breakable
method.
如果你真的想捕获全部Exceptions
/Throwables
,你应该这样做:
import scala.util.control.Breaks.{break, breakable}
import scala.util.control.ControlThrowable
breakable {
for(i <- 1 until 10) {
try {
println(i)
if(i > 5) break
} catch {
case c: ControlThrowable => throw c
case t: Throwable => t.printStackTrace
}
}
}
Scala 标准库还包括针对此类情况的特殊构造,它可以让您捕获所有Throwables
除了致命的,比如OutOfMemoryError
or StackOverflowError
,以及延伸的所有内容ControlThrowable
:
import scala.util.control.NonFatal
try {
//do stuff
} catch {
case NonFatal(e) => e.printStackTrace
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)