试着去买些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