试着去买些scala

试着去买些scala,scala,Scala,在未找到此处\u a的情况下,不会返回到此处\u b。为什么.getOrElse不起作用 谢谢@jwvh。这些值是sting文件路径,因此异常是线程“main”java.io.FileNotFoundException中的以下异常: 根据安德鲁·詹姆斯·拉米雷斯(Andrew James Ramirez)的评论,我尝试过这样做,但问题依然存在 Try(抛出新异常(“此处失败”))。getOrElse(“此处失败”) 我也试过了 Try(抛出新异常(“FileNotFoundException h

在未找到
此处\u a
的情况下,不会返回到
此处\u b
。为什么
.getOrElse
不起作用

谢谢@jwvh。这些值是sting文件路径,因此异常是线程“main”java.io.FileNotFoundException中的以下异常:

根据安德鲁·詹姆斯·拉米雷斯(Andrew James Ramirez)的评论,我尝试过这样做,但问题依然存在

Try(抛出新异常(“此处失败”))。getOrElse(“此处失败”)

我也试过了

Try(抛出新异常(“FileNotFoundException here\u a”)。getOrElse(“here\u b”)

编辑

看来我把这个问题简单化了。更多的上下文。字符串实际上是一个文件路径。也许这会带来不同

实际上,
json
文件可以在两个可能的位置之一找到。因此,我希望尝试第一个位置,如果返回
java.io.FileNotFoundException
,请返回第二个位置。这就是我目前拥有的:

val input\u file=Try(抛出新异常(“失败位置\u a/file\u a.json”)).getOrElse(“位置\u b/file\u a.json”)

编辑V2


我不好意思说我发现了这个简单的错误。我在
spark
上运行这个scala代码,在测试之间我忘了重新打包<代码>sbt包是所需的全部:-/

我想你误解了,试试看。还有,盖托莱尔斯

Try的定义:

Try类型表示可能导致异常或返回成功计算值的计算。它类似于,但在语义上不同于scala.util.any类型

只有在抛出异常时,它才会失败。null仍然是一个值。

Try()
返回
成功(x)
失败(e)
,其中
x
是返回的成功值,
e
是引发的异常
getOrElse()
打开
Success
或提供默认值


如果你没有得到“OrElse”,那么你的代码就不会抛出一个可捕获的异常。

它会按照你的预期工作

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> 

如果您觉得这个答案不够充分,请在您的问题中提供更多的上下文。

谢谢Andrew。例外情况有多普遍?我的异常是
FileNotFoundException
,我尝试了
FAIL
,但没有运气。它帮助我理解了Try和getorelse。您的两个新示例都返回“here_b”字符串。如果您得到的结果不同,那么它与您在这里介绍的代码无关。谢谢Synesso。在更改之间,我尴尬地忘记运行
sbt包
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> 
$ scala
Welcome to Scala 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_40).
Type in expressions for evaluation. Or try :help.

scala> val label = Try(throw new RuntimeException("here_a")).getOrElse("here_b")
label: String = here_b