使用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"
}