Comment ignorer une exception?
Y a-t-il une façon plus élégante d'écrire ce qui suit?
try {
... // Some throwing code
return first
}
catch {
case e:ExceptionType => {} // No code to execute. Ignore error.
}
return second
4 réponses
scala.util.control.Exception.ignoring(classOf[ExceptionType]) {
... // Some throwing code
}
@Daniel a déjà fourni la méthode canonique à utiliser pour ce faire. Regardez à travers les autres méthodes dans scala.util.control.Exception
-ils sont très utiles et génériques!
Si vous avez besoin pour obtenir une valeur de retour du bloc try, utiliser failing
au lieu de ignoring
(mais sachez que le résultat est un Any
, c'est à dire pas typesafe).
Vous pouvez également écrire votre propre exception-catcher, qui sera un peu lent pour les travaux lourds mais autrement agréable à utiliser:
class DefaultOn[E <: Exception] {
def apply[A](default: => A)(f: => A)(implicit m: Manifest[E]) = {
try { f } catch { case x if (m.erasure.isInstance(x)) => default }
}
}
object DefaultOn { def apply[E <: Exception] = new DefaultOn[E] }
scala> DefaultOn[NumberFormatException](0) { "Hi".toInt }
res0: Int = 0
Ou si vous le souhaitez options:
class TryOption[E <: Exception] {
def apply[A](f: => A)(implicit m: Manifest[E]) = {
try { Some(f) } catch { case x if (m.erasure.isInstance(x)) => None }
}
}
object TryOption { def apply[E <: Exception] = new TryOption[E] }
scala> TryOption[NumberFormatException] { "Hi".toInt }
res1: Option[Int] = None
Ou vous pouvez être inspiré par ceci plus les routines de bibliothèque et créer vos propres méthodes pour ignorer plusieurs exceptions différentes et préserver les types sur la valeur de retour.
Dans Scala, toutes les exceptions ne sont pas vérifiées, donc si vous ne le souhaitez pas, vous pouvez simplement les ignorer (et donc l'exception sera escaladée à un niveau supérieur). Ignorer silencieusement une exception comme vous le souhaitez est généralement une mauvaise pratique. Cependant, votre code peut être raccourci en:
try {
... // Some throwing code
} catch {
case e:ExceptionType =>
}
Hows sur:
Try {
// some throwing code
}
Cela ignorera toutes les exceptions non fatales, ce que vous voulez faire la plupart du temps.