使用try and recover或toOption处理Scala异常

使用try and recover或toOption处理Scala异常,scala,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

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

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)
def exphandler(i:Any):Try[Any]=Try(i)recover{
案例e=>“你好”
}
exphandler(BigDecimal(Cols(5))/adjust\u currency\u map(static(4)),//开盘价
======================================
java.lang.NumberFormatException
//|在java.math.BigDecimal。(BigDecimal.java:459)
//|在java.math.BigDecimal.(BigDecimal.java:728)
//|在scala.math.BigDecimal$.exact(BigDecimal.scala:125)
//|位于scala.math.BigDecimal$.apply(BigDecimal.scala:283)
//|位于com.DC.FTDataParser.FileParser$$anonfun$1.apply(FileParser.scala:115)
===============================


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

Try
捕获它抛出的异常之前,正在计算
exphandler
的参数。您可以使用以下方法解决此问题:


现在,
exphandler
的参数只有在调用
Try
的内部才会被计算,此时异常将被捕获并表示为您所期望的状态。

谢谢Travis。它成功了,但结果显示是成功的(14.565),而不是我预期的14.565。谢谢特拉维斯的指点。它现在起作用了。def exphandler(i:=>Any)=Try(i)match{case Success(v)=>v case Failure()=>“Hello”}@user3341078您也可以这样做:
Try(i).getOrElse(“Hello”)
。谢谢Kigyo。我也试过了,但不是问题。正如特拉维斯所指出的,按价值调用是一个问题。
def exphandler(i: => Any): Try[Any] = Try(i) recover {
  case e => "Hello"
}