参数检验应该在函数内部还是外部?

2015-11-23 07:12:32 +08:00
 billgreen1
最近在写一个包,关于参数检验有点困惑:
1. 包内的每个函数,都检验参数的有效性。比如参数不能为负数,年龄应该有个范围等。如果参数不符合,则引发异常。
2. 假设参数都是合理的,把检查参数的任务留给包的调用者,调用者需要确保参数合理。(当然包的说明文档会给出参数的合理范围等)

你们在实践中一般都怎么做的?
3056 次点击
所在节点    Python
13 条回复
hellov22ex
2015-11-23 07:23:30 +08:00
哪里操作哪里验证
vietor
2015-11-23 07:43:08 +08:00
文档要明确,提供者必须要校验,调用者两可。
hualuogeng
2015-11-23 08:10:34 +08:00
如何调用者校验,则代码会在多处重复类似的校验,所以,函数内校验是常用的做法。
taozhijiangscu
2015-11-23 08:30:16 +08:00
一般底层函数只做操作,然后再在上面封装一个调用接口,做参数检测
MacBookPro
2015-11-23 12:43:41 +08:00
应该可以抽出一个校验参数的接口,
需要使用的就是调用

我们是这么搞的
wizardforcel
2015-11-23 12:58:01 +08:00
提供者不检测的 api 最后都被玩死了,无论是 web api 还是包。
pkking
2015-11-23 14:22:39 +08:00
"永远不要相信用户输入"
billgreen1
2015-11-23 14:57:54 +08:00
谢谢大家了,
@MacBookPro , @taozhijiangscu ,能否给一个例子?我现在每个函数都要做类似的检验,感觉从夫代码比较多。
martyyyyy
2015-11-23 15:16:38 +08:00
谁都不要相信这样最好 就是验证多 有点累
martyyyyy
2015-11-23 15:17:07 +08:00
python 里可以用装饰器
martyyyyy
2015-11-23 15:17:38 +08:00
@pkking 严重同意你的观点 必须严谨
kneep
2015-11-23 18:46:27 +08:00
如果你是独立提供给外部使用的库或 api ,肯定是你内部检验。
msg7086
2015-11-24 00:07:28 +08:00
#8 @billgreen1 重复代码多,要么是因为你代码结构不行,要么是因为你用的语言表达力不行。

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

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

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

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

© 2021 V2EX