Exception 异常处理的正确和不正确使用?

Exception 异常处理的正确和不正确使用?,exception,Exception,您好,我正在尝试更清楚地了解何时使用异常以及何时不使用异常。我将给出几个案例场景。你能让我知道我应该使用例外,并解释为什么我应该或不应该使用例外吗?(注意:这不是家庭作业问题) 场景1:我设计了一个电脑游戏,其中每个单元可以移动到棋盘上的一个正方形。但是,某些方块可能会被阻挡。我是否应该抛出SquareIsBlockedException来阻止设备的移动 场景2:我向数据库插入了一条记录,但是它失败了,因为那里已经存在唯一的ID。它抛出一个DuplicateException 为什么我应该在场景

您好,我正在尝试更清楚地了解何时使用异常以及何时不使用异常。我将给出几个案例场景。你能让我知道我应该使用例外,并解释为什么我应该或不应该使用例外吗?(注意:这不是家庭作业问题)

场景1:我设计了一个电脑游戏,其中每个单元可以移动到棋盘上的一个正方形。但是,某些方块可能会被阻挡。我是否应该抛出SquareIsBlockedException来阻止设备的移动

场景2:我向数据库插入了一条记录,但是它失败了,因为那里已经存在唯一的ID。它抛出一个DuplicateException

为什么我应该在场景2中使用异常,而不是在场景1中使用异常?

1)不。被阻止的方块并不是一件异常的事情——可以假设它在游戏中非常常见。当程序中发生不应该发生的事情时,应该触发异常

2) 可能吧。将重复记录插入数据库是正常情况下不应该发生的事情。它也可能暗示有bug


如果触发异常,则停止执行流。这是好的-在您的系统发现它正在插入一个重复的行之后,它应该怎么做?很可能您还没有准备好让系统在这种情况下正常运行。此外,您还可以(在调试器、日志等中)看到出现了什么问题,从而使修复代码变得更容易。

这一切都取决于用例,在您的两个示例中,使用异常与否可能很有意义

例外情况应用于。。。例外情况。在web中有一些“坏代码”示例,其中异常用于流控制。不要这样做

所以Ex1听起来像是一个流控件,使用if或language流控件


在Ex2中,如果ID已经存在,则需要首先点击db进行查找时,对重复项的显式控制可能会导致更多代码。如果ID是自动ID,请使用异常,因为正常情况下是自动。身份证都是不同的。id是否为用户可编辑的数据字段(例如名称),如果id已存在,请先查找。

此问题已被问过多次。