使用try-and-recover或toOption处理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)

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

任何一点都会有帮助,因为这让我很生气。

exphandler的参数在其引发的异常被Try捕获之前正在进行求值。您可以使用按名称参数来修复此问题

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

现在,exphandler的参数要等到Try的调用内部才能求值,在那里异常将被捕获并按预期表示。

最新更新