提出异常是一种可接受的测试输入类型的方法

时间:2015-11-09 12:35:48

标签: python regex exception

假设我要求用户输入浮点数,我的直觉就是使用正则表达式。

emptyDir

但是,您可以通过抛出异常来实现相同的检查。

'(\+|-)?([0-9]+\.?[0-9]*|\.[0-9]+)([eE](\+|-)?[0-9]+)?$'

抛出异常而不是使用正则表达式有什么优缺点?

4 个答案:

答案 0 :(得分:1)

让Python检查值以及处理ValueError的优点很多。你有明确的意图。您可以立即告诉它在每种情况下应该做什么,以及为什么。您正在使用该语言,而不是尝试通过正则表达式自行完成所有逻辑。

正则表达式方法不易阅读或理解,如果做得不对,可能会引入错误。不要重新发明轮子。

Python旨在有效地将异常作为自然控制结构来处理,因此检查ValueError就好了。相比之下,c ++中的异常是昂贵的,因为它们在资源管理中实现了不同但非常重要的设计功能,因此在c ++程序中使用异常作为逻辑的正常部分并不是一个好主意。

答案 1 :(得分:0)

Pro:您正在测试Python是否可以将输入的值实际解释为float。

您应该在最后一次打印之前放置$.ajax({ url: 'file.php', success: function (result) { //Here i make the result global objNrs = result; $("#autocomplete").autocomplete({ source: objNrs, }); } }); ,如果用户输入了一个浮点并且定义了x(即如果没有引发ValueError),则只打印else:的值:

x

答案 2 :(得分:0)

使用常规渐进来确定字符串是否包含浮点值是确保类型的更复杂方法。而且,即使string不是有效的浮点字符串,它也会以静默方式返回。

例如。 re.match('?。?。?(+ | - )([0-9] + [0-9] * | [0-9] +)(EE [0-9] +)$ '," abc")将返回None而不是引发错误。

但同样适用于float,(例如float(" abc"))会在程序中引发异常。

因此,对于大多数情况,必须使用正则表达式来构建健壮的验证代码。

答案 3 :(得分:0)

它实际上取决于您希望如何处理错误。需要明确的是,您的代码不会像您认为的那样工作。

如果您在str的输入中输入float(),则x不再被分配。因此,当执行以下操作时:print "you entered " + str(x)您将获得:NameError: name 'x' is not defined

因此,它解决了你想要处理错误的方式,你现在编写代码的方式,正则表达式可能会更好。