¿Qué es un error en caja en Scala?
playframework playframework-2.1 (2)
No sé si es un Boxed Error
, pero de acuerdo con su stacktrace, el problema de raíz proviene de la factorie
lib, del método max2Double
en la línea 95 .
Extracto del código fuente:
/**Returns both the maximum element and the second-to-max element */
def max2ByDouble(extractor: A => Double): (A, A) = {
val s1 = t.toSeq
assert(s1.length > 1) // <<<== HERE
var best1 = Double.NegativeInfinity
...
Parece que tu Traversable
está vacío.
Cuando ejecuto mi aplicación, el navegador muestra
[ExecutionException: Boxed Error]
No dice nada sobre el número de línea, etc.
En la consola, tengo lo siguiente
! @6elaah0c8 - Internal server error, for (GET) [/testlearn] ->
play.api.Application$$anon$1: Execution exception[[ExecutionException: Boxed Error]]
at play.api.Application$class.handleError(Application.scala:289) ~[play_2.10.jar:2.1.1]
at play.api.DefaultApplication.handleError(Application.scala:383) [play_2.10.jar:2.1.1]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$17$$anonfun$apply$24.apply(PlayDefaultUpstreamHandler.scala:326) [play_2.10.jar:2.1.1]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$17$$anonfun$apply$24.apply(PlayDefaultUpstreamHandler.scala:324) [play_2.10.jar:2.1.1]
at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) [play_2.10.jar:2.1.1]
at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) [play_2.10.jar:2.1.1]
java.util.concurrent.ExecutionException: Boxed Error
at scala.concurrent.impl.Promise$.resolver(Promise.scala:52) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na]
at scala.concurrent.impl.Promise$.scala$concurrent$impl$Promise$$resolveTry(Promise.scala:44) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na]
at scala.concurrent.impl.Promise$DefaultPromise.tryComplete(Promise.scala:116) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na]
at scala.concurrent.Promise$class.complete(Promise.scala:55) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na]
at scala.concurrent.impl.Promise$DefaultPromise.complete(Promise.scala:58) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na]
at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:23) [factorie-1.0.0-M4-jar-with-dependencies.jar:na]
Caused by: java.lang.AssertionError: assertion failed
at scala.Predef$.assert(Predef.scala:165) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na]
at cc.factorie.util.TraversableExtras$class.max2ByDouble(TraversableExtras.scala:95) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na]
at cc.factorie.package$$anon$2.max2ByDouble(package.scala:148) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na]
at cc.factorie.optimize.SampleRankExample.accumulateExampleInto(SampleRank.scala:31) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na]
at cc.factorie.optimize.OnlineTrainer$$anonfun$processExamples$3.apply(Trainer.scala:72) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na]
at cc.factorie.optimize.OnlineTrainer$$anonfun$processExamples$3.apply(Trainer.scala:63) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na]
"Error en caja" es la respuesta de Scala a un Error
se lanza dentro de un Future
. En Java, y por lo tanto en Scala, las subclases de tipo Error
tienen un significado especial como errores fatales . Vea las diferencias entre excepción y error . En resumen, el javadoc dice:
Un error es una subclase de Throwable que indica problemas graves que una aplicación razonable no debería intentar atrapar. La mayoría de esos errores son condiciones anormales.
A diferencia de tirar otros Throwable
s en un futuro, cuando se lanza una subclase de Error
, la resolución predeterminada de Scala terminará el Error
en una java.util.concurrent.ExecutionException
, con la cadena de mensaje "Boxed Error", y completará su promesa con un fracaso.
Para citar la documentación de futuros http://docs.scala-lang.org/overviews/core/futures.html wrt Error
está produciendo un Error
:
Las excepciones de [Error] vuelven a surgir en el hilo que ejecuta el cálculo asincrónico fallido. El motivo detrás de esto es evitar la propagación de excepciones relacionadas con flujos críticos y de control normalmente no manejadas por el código del cliente y, al mismo tiempo, informar al cliente en qué futuro falló el cálculo.
Si desea hacer algo especial con la falla, se puede extraer el Error
original que se produjo (pero no de una forma especialmente adecuada para la coincidencia de patrones), mediante ExecutionException#getCause()