【问题标题】:In which cases does try-catch catch exceptions?try-catch 在哪些情况下会捕获异常?
【发布时间】:2019-11-19 01:29:22
【问题描述】:

我刚开始学习 Scala,所以这可能是一个简单的问题。我想使用 try-catch 块来检查变量是否已声明。

如果变量不存在,我正在使用 try-catch 块并捕获 NoSuchElementException

try{
  print(testVariable)
}
catch{
  case e: NoSuchElementException => print("testVariable not found")
}

我的代码显示testVariable 不存在而不是抛出异常的错误。然后我也尝试了多个其他异常,但 Scala 的 try-catch 似乎没有捕捉到它们中的任何一个(除以零异常除外)。

有人可以指导我如何使用 Scala 的 try-catch 块吗?

【问题讨论】:

  • 如何抛出异常?

标签: scala exception try-catch


【解决方案1】:

在 Scala(或几乎任何编译过的编程语言)中,检查变量是否已声明是编译器的工作,在编译时完成。如果您尝试使用尚未声明的变量,编译器会报错,您的代码将无法运行。

异常是在运行时表示问题的一种方式。

“编译时”和“运行时”之间没有重叠,因此您尝试做的事情没有意义。 没有“变量不存在”的例外,这就是为什么你无法捕捉到它。

作为对比,举个例子:

val map = Map('a' -> 1, 'b' -> 2)
map('c') // will throw NoSuchElementException because there is no 'c' in the map

在这种情况下,map.apply('c')apply 的语法糖可以让您执行 map('c') 将引发异常,因为这就是 Map 的 apply 方法的实现方式。请参阅 the definition of Map#apply,如果密钥不是,则调用 Map#default t 在地图中;Map#default 抛出 NoSuchElementException。

您可以使用 try/catch 捕获该异常,例如

try {
  map('c')
} catch {
   case e: NoSuchElementException =>
     println("got it!")
}

【讨论】:

    猜你喜欢
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 2011-05-27
    • 1970-01-01
    相关资源
    最近更新 更多