当我的程序通过跳过它可以正常工作时,为什么抛出RuntimeException?

时间:2018-08-28 08:52:39

标签: scala apache-spark databricks

我正在使用spark和scala开发databricks日志分析器应用程序。 如果日志行不遵守设置的模式,则在对象ApacheAccessLog中抛出RuntimeException。

log match {
  case PATTERN(ipAddress, clientIdentd, userId, dateTime, method, endpoint, protocol, responseCode, contentSize)
  => ApacheAccessLog(ipAddress, clientIdentd, userId, dateTime, method, endpoint, protocol, responseCode.toInt,
    contentSize.toLong)
  case _ => throw new RuntimeException(s"""Cannot parse log line: $log""")
}

我希望有人向我解释为什么我会因为一个日志行不遵守我的模式而抛出RuntimeException并中断我的程序?跳过该行不是更好,以便程序将仅继续处理尊重模式的行吗?

如果您提出一个更好的主意,我也会很高兴。

1 个答案:

答案 0 :(得分:0)

看,这只是一个例子,那里没有哲学:)是的,更宽松的解决方案只会跳过这一行,但有时您可能希望获得例外而不是错过某些东西。

为什么他们用这种方式编写代码?也许他们希望每条线都匹配,也许还有其他,我们永远不会知道,也没关系。但是,最好考虑一下设计决策和替代解决方案的后果