首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在“验证”类中使用异常还是在返回状态码中使用异常更好?

在“验证”类中使用异常还是在返回状态码中使用异常更好?
EN

Stack Overflow用户
提问于 2010-09-09 04:04:13
回答 2查看 1.7K关注 0票数 9

假设我正在创建一个类来验证一个数字,比如美国的"Social Security“(就像一个基于国家的id的例子)。这里有一些规则来验证这个数字,它来自网站中html表单中的输入。

我在考虑用Python语言创建一个简单的类和一个公共的validate方法。此validate简单地返回TrueFalse。此方法将调用其他小的私有方法(例如,如果有不同的规则,则调用第一个'x‘数字),每个方法也返回TrueFalse

因为这真的很简单,所以我考虑只使用布尔状态码(无论它是否有效,都不需要关于错误的有意义的消息)。

我一直在阅读some articles about using exceptions,我想知道你对我的情况的看法:使用异常是一个好主意吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-09 04:08:53

如果输入有效或无效,则只需返回布尔值。验证测试遇到无效值并没有什么异常。

票数 6
EN

Stack Overflow用户

发布于 2012-08-10 07:09:39

这是一个非常古老的问题,但由于唯一的答案- IMO -不适用于Python,下面是我对它的看法。

Python中的异常是许多编程新手很难处理的问题。与其他语言相比,Python在异常的使用方式上有很大的不同:实际上,Python经常使用异常来进行流控制

典型的例子是for循环:您肯定会同意,循环耗尽其迭代并没有什么“奇特”之处(事实上,这就是循环所做的,除非被破坏)……然而,Python并没有提前检查是否还有要处理的值,而是继续尝试从迭代器中读取值,如果不成功,就会引发StopIterator exception,然后for表达式会捕获该值,并使代码退出循环。

此外,在Python语言中,使用Leap EAFP权限(请求宽恕比=try-except更容易)而不是LBYL (在使用Leap之前先看一下= if not A, B or C then)是惯用的。

在这一点上,csj的答案对于C或Java是正确的,但对于Python (其异常在本质上中很少是“异常”的)来说是无关的。

但是,另一个需要考虑的因素是用户数据无效,但您未能对验证函数结果采取行动的情况:

对于具有return statement

  • ,如果不能处理False值,将导致无效数据沿管道向下发送,反之,如果您要捕获异常,则无法捕获它将导致异常在堆栈中传播,最终导致代码暂停。

虽然第二种选择一开始可能看起来很可怕,但它仍然是正确的道路:如果数据是无效的,那么进一步传递它是没有意义的……它很可能会在以后的流程中引入难以跟踪的bug,而且您还会错过修复代码中的bug的机会(无法对无效数据执行操作)。

再来一次。使用异常的是 pythonic way to do (但它不适用于大多数其他语言),在this other answerzen of python中也有说明

错误永远不应该静默地传递。

除非明确地保持沉默。

哈!

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3671450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档