val label = Try("here_a").getOrElse("here_b")
Run Code Online (Sandbox Code Playgroud)
在here_a没有找到的情况下,这不会回落here_b.为什么.getOrElse不起作用?
谢谢@jwvh.这些值是sting文件路径,因此例外如下Exception in thread "main" java.io.FileNotFoundException:
根据安德鲁詹姆斯拉米雷斯的评论,我尝试了这个,但问题仍然存在.
Try(throw new Exception("FAIL here_a")).getOrElse("here_b")
我也试过了
Try(throw new Exception("FileNotFoundException here_a")).getOrElse("here_b")
编辑
对于SO来说,似乎我可能过于简化了这个问题.更多背景.该字符串实际上是一个文件路径.也许这有所作为?
实际上,json可以在两个可能的位置之一中找到文件.因此,我希望尝试第一个位置,如果java.io.FileNotFoundException返回,则返回第二个位置.这就是我现在拥有的:
val input_file = Try(throw new Exception("FAIL location_a/file_a.json")).getOrElse("location_b/file_a.json")
编辑 V2
我很尴尬地说我发现了这个简单的错误.我正在运行此scala代码spark,我忘了在测试之间重新打包.sbt package就是这一切.: - /
我觉得你误解了Try.和.getOrElse
尝试的定义:
Try类型表示可能导致异常或返回成功计算的值的计算.它与scala.util.Either类型相似,但在语义上不同.
scala> Try("here_a")
res1: scala.util.Try[String] = Success(here_a)
scala> Try("here_a").get
res2: String = here_a
scala> Try(throw new Exception("FAIL here_a")).getOrElse("here_b")
res3: String = here_b
scala>
Run Code Online (Sandbox Code Playgroud)
它只会在抛出异常时失败.null仍然是一个值.