当前位置: 首页 > 知识库问答 >
问题:

如何处理不同的失败案例

齐乐逸
2023-03-14

我想处理不同的失败案例(返回为尝试)。

示例代码

main(args(0)) match {
  case Success(result) => result.foreach(println)
  case Failure(ex) => ex match {
    case FileNotFoundException =>
      System.err.println(ex.getMessage)
    case StatsException =>
      System.err.println(ex.getMessage)
    case _ => {
      ex.printStackTrace()
    }
      System.exit(1)
  }
}

如果是StatsExceptionFileNotFoundException只需打印消息,对于所有其他异常,打印堆栈跟踪。

然而,ex永远只是一个可丢弃的,因此case StatsException是一个没有结果的类型测试(根据IntelliJ,类型Throwable的值不能也是StatsException.type)

更糟糕的是,我会遇到编译错误:java。伊奥。FileNotFoundException不是一个值

以惯用的方式处理不同的失败案例的最佳方式是什么?

共有2个答案

姜献
2023-03-14

这似乎有效:

main(args(0)) match {
  case Success(result) => result.foreach(println)
  case Failure(ex: FileNotFoundException) =>
    System.err.println(ex.getMessage)
    System.exit(1)
  case Failure(ex: StatsException) =>
    System.err.println(ex.getMessage)
    System.exit(1)
  case Failure(ex) =>
    ex.printStackTrace()
    System.exit(1)
}

如果有这个系统就好了。退出(1)所有故障案例共享的呼叫。

姚宪
2023-03-14

我会简化你自己的回答:

main(args(0)) map (_ foreach println) recover {
  case ex@(_: FileNotFoundException | _: StatsException) =>
    System.err.println(ex.getMessage)
    System.exit(1)
  case ex =>
    ex.printStackTrace()
    System.exit(1)
}

在第一个案例中子句中,我们匹配两个选项。scala禁止像case ex:FileNotFoundException | ex:statexception这样的声明,但我们可以通过@符号分配整个匹配结果。有关更多详细信息,请参见此问题

 类似资料:
  • 我正在与我无法控制的遗留库集成。 它定义了以下接口: 这个“subscribe”方法被不同的线程频繁调用。我关心“Future.get()”的结果的唯一情况是当它失败时,所以我可以获取并处理异常。这不一定发生在调用线程中。另外,在“Future.get()”上阻塞调用线程对我来说是非常昂贵的,因为即使成功也可能需要几秒钟才能完成。 所以我的任务是以某种方式“后处理”所有这些期货,过滤失败的期货。基

  • 在更新到Android Studio3.2 Beta 1后,我开始在两个不同的项目中出现以下错误: Android Studio 3.1.3没有错误,在更新到beta 1之前,Android Studio 3.2的各种金丝雀版本也没有错误。 这不是Android Studio Gradle已经释放的模块的副本 编辑 事件日志显示

  • 我正在开发一个仅支持iPhone的iOS 8应用程序。我想只支持iPhone 4S的纵向模式设备。 我有一个图形设计,它采用全屏内容。我使用自动布局来处理视图,并使其适用于所有屏幕。但是,我使用一个小资产来管理从iPhone4S工作的设计。当我在iPhone6S/6看到它时,内容非常小,大量额外的空间被浪费了。 当设备分辨率变大时,我想增加字体大小、图像大小。这个应用程序中有很多屏幕。 例如,我在

  • 我在spark streaming应用程序中看到一些失败的批处理,原因是与内存相关的问题,如 无法计算拆分,找不到块输入-0-1464774108087

  • 类项目: hbm文件: 方法如下:

  • 我在服务器1、服务器2和服务器3上运行zookeeper设置,同样kafka也在服务器1、服务器2和服务器3上运行。 安装程序正在kubernetes中运行。 问题陈述: > 如果一个动物园管理员设置关闭,整个设置都会关闭,因为kafka依赖于动物园管理员。我说得对吗? 如果Q1正确-是否有任何方法来进行设置,例如如果一个动物园管理员服务器将停机,那么kafka应该按原样运行? 如何在kubern