Fra*_*ger 5 programming-languages exception-handling
使用异常来管理非错误的案例是一种好习惯吗?
就像在JavaScript和Python中管理生成器中的StopIteration案例一样(yield关键字).
Jon*_*eet 10
通常不是,不.ASP.NET使用它Response.Redirect- 实际上中止线程,然后捕获异常并重置它.这是非常讨厌的,但它确实让你基本上"退出"请求,而不是每个级别的堆栈都知道它需要立即返回.
尽量避免.如果您认为您必须这样做,请咨询两位同事,介绍设计并询问他们是否可以更干净地做到这一点.如果你们都没有想到更好的方法,那就用大量文档来做.
这取决于语言.每种语言都有自己的设计和习语.对于大多数语言,例外应该是例外.
在像C++,Java和C#这样的语言中,将异常用于其他任何事情都是非常糟糕的形式.
在Python中,异常更频繁地用于迭代结束之类的事情.还有更多的模型尝试做你想做的事情并稍后处理例外而不是验证输入("更容易要求宽恕而不是权限").例如,如果要打开文件,可以在Java中检查它是否存在,然后打开它并检查是否有有效的流.在Python中,您可以打开它并使用它.如果失败则处理异常.
来自维基百科的文章:
只要出现错误情况,Python样式就会要求使用异常.在实际使用文件或资源之前,不是测试对文件或资源的访问,而是在Python中继续尝试使用它,如果访问被拒绝则捕获异常.
即使错误没有问题,例外也可以用作非本地控制转移的更一般方法.例如,用Python编写的Mailman邮件列表软件在决定拒绝邮件或保留邮件以供主持人批准时,使用例外来跳出深层嵌套的邮件处理逻辑.