据我所知,"例外是特殊情况下" [1],但除了只是被重复过和过一遍,我从来没有发现这一事实的实际原因.
作为他们停止执行,这是有道理的,你会不会希望他们为平原的条件逻辑,但为什么不输入验证?
假设你通过一组输入是循环和捕捉每个异常将它们组合在一起的用户通知...我不断地看到,这是某种"错误的",因为用户输入不正确输入所有的时间,但是这点似乎是基于在语义上.
输入不是预期的,因此是例外.抛出一个异常,让我解释清楚到底发生了什么事像StringValueTooLong或或IntegerValueTooLow或InvalidDateValue或什么的.为什么这被认为是错的?
替代抛出一个异常,将回移(最终收集)错误代码或差远了错误的字符串.然后我会直接显示这些错误字符串,或者解析错误代码然后向用户显示相应的错误消息.不会将异常视为可延展的错误代码吗?为什么要创建的错误代码和消息一个单独的表,当这些可以与例外的功能被推广已经内置到我的语言?
另外,我发现Martin Fowler的这篇文章是关于如何处理这些事情 - 通知模式.我不确定我是如何将此视为除了不停止执行的异常之外的任何东西.
a:我到处都读过有关例外的内容.
---编辑---
已经提出了许多重点.我对大多数事情都有评论,而且还有优点,但我还不完全相信.
我并不是要提倡将Exceptions作为解决输入验证的正确方法,但我想找到很好的理由,为什么这种做法被认为是如此邪恶,因为似乎大多数替代解决方案只是伪装的例外.