使用try和recover或toOption进行Scala异常处理

时间:2014-06-22 00:45:11

标签: scala

这是为了从异常处理中恢复而编写的一个处理程序,但是当我调用它时它没有恢复但是因以下错误消息而失败

def exphandler(i: Any): Try[Any] = Try(i) recover {
  case e => "Hello"
}


exphandler(BigDecimal(Cols(5))/adjust_currency_map(static(4))), //Open price


======================================
java.lang.NumberFormatException
                                              //|   at java.math.BigDecimal.<init>      (BigDecimal.java:459)
                                              //|   at java.math.BigDecimal.<init>(BigDecimal.java:728)
                                              //|   at scala.math.BigDecimal$.exact(BigDecimal.scala:125)
                                              //|   at scala.math.BigDecimal$.apply(BigDecimal.scala:283)
                                              //|   at com.DC.FTDataParser.FileParser$$anonfun$1.apply(FileParser.scala:115)

===============================

任何一点都会有所帮助,因为它会让我发疯。

1 个答案:

答案 0 :(得分:3)

exphandler的参数在被Try捕获之前被评估。您可以使用by-name parameter

解决此问题
def exphandler(i: => Any): Try[Any] = Try(i) recover {
  case e => "Hello"
}

现在,exphandler的参数在Try调用之前不会被评估,其中异常将被捕获并表示为您所期望的。