【问题标题】:Which exception to throw when I find my data in inconsistent state in Scala?当我在 Scala 中发现我的数据处于不一致状态时会抛出哪个异常?
【发布时间】:2014-06-04 16:27:23
【问题描述】:

我有一个从数据源读取数据的小型 Scala 程序。此数据源当前是一个 .csv 文件,因此它可能包含数据不一致。

在为我的数据实现存储库模式时,我实现了一个方法,该方法将通过一个应该是唯一的特定字段返回一个对象。但是,我不能保证它真的是独一无二的,就像在 .csv 文件中一样,我无法像在真实数据库中那样强制执行数据质量。

因此,该方法检查存储库中是否存在具有请求字段值的一个或零个对象,并且运行良好。但是我不太了解 Scala(或者 Java),而且我发现的 Java 异常层次结构图表也不是很有帮助。如果有两个对象具有相同的所谓唯一值,那么这将是引发的适当异常。我应该使用什么?

【问题讨论】:

  • 您也可以创建自己的Exception
  • @EndeNeu 我可以,但这次我不太关心类型,因为我不打算对此做任何特别的事情。我只是认为这是一个如此常见的场景,可能有一个关于如何处理它的约定,这是一个学习约定的好机会。创建我自己的类型不会教我约定,而且在这个项目中会过分。
  • 我明白了,我对异常的了解不足以为您的情况找到一个特定的异常,可能我会使用IOException 之类的东西,不确定这是否是一个过于笼统的异常。

标签: scala exception-handling


【解决方案1】:

对于这种情况有两个方便的例外:IllegalStateExceptionIllegalArgumentException。当对象内部状态处于某个非法位置时使用第一个(例如,您调用 connect 两次),当有来自外部的数据时使用最后一个(这似乎更适合您的情况)世界并且它不满足某些规定的条件:例如负值,当函数应该使用零值和正值时。

这两者都不应该在调用方以编程方式处理(使用 try/catch)——它们表示非法使用 api 和/或程序流中的逻辑错误,并且必须在开发过程中修复此类错误(在您的情况下,他们必须通知正在传递该数据的开发人员,该特定字段必须仅包含唯一值)。

【讨论】:

  • 顺便说一句,“必须在开发过程中修复”是我听到的“可以合理地预期程序可以从中恢复”的真理的最佳方式。荣誉。
【解决方案2】:

您始终可以使用自定义异常,如果这是一个 Web API,您可能希望将异常映射到:错误请求 (400) 代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 2011-05-26
    • 2011-04-08
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    相关资源
    最近更新 更多