Qu'est-ce qu'une erreur boxée dans Scala?
quand j'exécute mon application, le navigateur affiche
[ExecutionException: Boxed Error]
il ne dit rien au sujet du numéro de ligne, etc.
dans la console, j'ai le suivant
! @6elaah0c8 - Internal server error, for (GET) [/testlearn] ->
play.api.Application$$anon: 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$$anonfun$apply.apply(PlayDefaultUpstreamHandler.scala:326) [play_2.10.jar:2.1.1]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$$anonfun$apply.apply(PlayDefaultUpstreamHandler.scala:324) [play_2.10.jar:2.1.1]
at play.api.libs.concurrent.PlayPromise$$anonfun$extend1.apply(Promise.scala:113) [play_2.10.jar:2.1.1]
at play.api.libs.concurrent.PlayPromise$$anonfun$extend1.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.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.apply(Trainer.scala:72) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na]
at cc.factorie.optimize.OnlineTrainer$$anonfun$processExamples.apply(Trainer.scala:63) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na]
2 réponses
"Boxed " Erreur" est à la Scala en réponse à une Error
être jeté dans un Future
. En Java, et donc en Scala, les sous-classes de type Error
ont une signification particulière comme "1519110920 erreurs" fatales . Voir différences entre L'Exception et L'erreur . En bref, le javadoc dit:
une erreur est une sous-classe de Lancable qui indique des problèmes graves qu'une application raisonnable ne devrait pas essayer attraper. La plupart de ces les erreurs sont des conditions anormales.
contrairement à lancer d'autres Throwable
s dans un futur, quand une sous-classe de Error
est lancée, le résolveur Scala par défaut enveloppera le Error
dans un java.util.concurrent.ExecutionException
, avec la chaîne de message" Erreur encadré", et compléter votre promesse avec un échec.
pour citer la documentation sur les contrats à terme http://docs.scala-lang.org/overviews/core/futures.html W. R. T. Error
être jeté:
[Erreur] les exceptions sont relancés dans le fil de l'exécution de l'échec de l' calcul asynchrone. Le raisonnement derrière cela est à éviter propagation des exceptions critiques et liées au débit de régulation normalement ne pas traiter par le code client et en même temps informer le client dans lequel futur le calcul a échoué.
Si vous voulez faire quelque chose de spécial avec L'échec, l'original Error
qui a été lancé peut être extrait (mais pas d'une manière particulièrement propice à l'appariement des motifs), par ExecutionException#getCause()
Je ne sais pas si c'est un Boxed Error
, mais selon votre stactrace, le problème de racine vient de la factorie
lib, de la max2Double
méthode à la ligne 95 .
extrait du code source:
/**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
...
il semble que votre Traversable
soit vide.