写程序的时候,需要考虑理论上概率为零的意外情况吗?

2017-04-16 07:28:16 +08:00
 klxq15
比如一个数值输入计算,要先判断它是否全为数字,然后再计算
6852 次点击
所在节点    Python
61 条回复
340244120
2017-04-16 07:38:55 +08:00
前端验证 and 后端框架验证(比如 struts 的 form validation)
eyp82
2017-04-16 07:48:25 +08:00
如果理论上概率确实为 0, 那不需要考虑. 但是你确定是 0 吗?
lcorange
2017-04-16 07:48:36 +08:00
java 不用, python 要用,避免猪队友硬传你个字符串"123"过来搞事情
lucifer9
2017-04-16 08:01:57 +08:00
概率为 0 的事件未必一定是不可能事件
wenzichel
2017-04-16 08:07:13 +08:00
你比如的情况,概率应该不是 0 吧。如果接收的输入情况较少,可以采用白名单的方式,比如只能数字类型才能通过;如果接收的输入情况较多,那么就用黑名单的方式,比如含有特殊字符不能通过
mozutaba
2017-04-16 08:13:08 +08:00
' or 1 = 1'
k9982874
2017-04-16 08:19:57 +08:00
外部输入数据一概设定为不可信,严防 sb 用户和猪队友
mcfog
2017-04-16 08:30:03 +08:00
正是因为概率是 0 ,所以要加断言来标清楚。”这里的输入老子就只处理数字,不爽不要玩“

改这种风格代码非常爽,一改一跑一堆异常,解决完基本就没问题了
kongkongyzt
2017-04-16 08:42:11 +08:00
因为有猪队友的存在,所以一定要检验,亲身经历的事实。你永远无法想象你的队友有多蠢和粗心
ahhui
2017-04-16 08:45:06 +08:00
概率为 0 的事情按常理说,你想都想不到;你能想到的,概率一定不为 0 。
geelaw
2017-04-16 08:45:58 +08:00
因为计算机处理的内容是离散的,所以概率是 0 等同于不可能,不用处理。甚至小概率情况也不用管,比如硬件故障,这种完全管不了的情况也没法管。

但是期待用户输入的东西,用户输入乱七八糟的内容还是很有可能的,譬如:

- 用户输入了全角数字字符;
- 用户输入小数点的时候输入成了句号;
- 用户不小心在数字中间加了空格;
- 用户使用了千位分隔符,而你以为大家都不用千位分隔符;
- 用户使用 , 作为小数分隔符、使用 . 作为千位分隔符;
- 用户误触键盘其他键但是忘了删掉或者手太快;
- ……
gamexg
2017-04-16 08:50:02 +08:00
python 类的?
执行次类型转换,但是不需要自己处理异常。
外部输入的参数有问题直接给他抛异常完事。
codingadog
2017-04-16 08:52:38 +08:00
概率为 0 的事件不等于不可能事件……
rogerchen
2017-04-16 09:01:43 +08:00
要想模块化编程,必须把非法输入挡在函数的入口,多看代码大全
wiselyv2
2017-04-16 09:01:44 +08:00
比如上次亚马逊 s3 服务器 down 掉,很多程序员就没处理这种情况
codehz
2017-04-16 09:04:20 +08:00
这个题目描述大概是有问题的,不过如果按照概率为 0 来理解的话,就是说假定用户都是专业用户,知道什么是未定义行为,输入内容保证符合要求。。。这种情况下,确实不需要考虑了
as463419014
2017-04-16 09:13:02 +08:00
建议判断一下
1.你永远不知道你的队友会如何坑你
2.你永远不知道产品经理明天会不会改需求
n6DD1A640
2017-04-16 09:16:16 +08:00
永远不要相信外部的输入
elfive
2017-04-16 09:17:47 +08:00
工作认真对待该处理就处理;自己私下的小玩具就随意了。不过还是养成习惯最好。
工作上,我一般直接给 return ;
私下的朋友间的玩具,一般都是:
print("搞事啊!!");
exit(1)
#滑稽
cy18
2017-04-16 09:25:05 +08:00
理论概率为零就抛异常或者 assert 呗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/355154

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX