V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
billgreen1
V2EX  ›  Python

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

  •  
  •   billgreen1 · 2015-11-23 07:12:32 +08:00 · 3027 次点击
    这是一个创建于 3291 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在写一个包,关于参数检验有点困惑:
    1. 包内的每个函数,都检验参数的有效性。比如参数不能为负数,年龄应该有个范围等。如果参数不符合,则引发异常。
    2. 假设参数都是合理的,把检查参数的任务留给包的调用者,调用者需要确保参数合理。(当然包的说明文档会给出参数的合理范围等)

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

    我们是这么搞的
    wizardforcel
        6
    wizardforcel  
       2015-11-23 12:58:01 +08:00 via Android
    提供者不检测的 api 最后都被玩死了,无论是 web api 还是包。
    pkking
        7
    pkking  
       2015-11-23 14:22:39 +08:00
    "永远不要相信用户输入"
    billgreen1
        8
    billgreen1  
    OP
       2015-11-23 14:57:54 +08:00
    谢谢大家了,
    @MacBookPro , @taozhijiangscu ,能否给一个例子?我现在每个函数都要做类似的检验,感觉从夫代码比较多。
    martyyyyy
        9
    martyyyyy  
       2015-11-23 15:16:38 +08:00
    谁都不要相信这样最好 就是验证多 有点累
    martyyyyy
        10
    martyyyyy  
       2015-11-23 15:17:07 +08:00
    python 里可以用装饰器
    martyyyyy
        11
    martyyyyy  
       2015-11-23 15:17:38 +08:00
    @pkking 严重同意你的观点 必须严谨
    kneep
        12
    kneep  
       2015-11-23 18:46:27 +08:00 via iPhone
    如果你是独立提供给外部使用的库或 api ,肯定是你内部检验。
    msg7086
        13
    msg7086  
       2015-11-24 00:07:28 +08:00
    #8 @billgreen1 重复代码多,要么是因为你代码结构不行,要么是因为你用的语言表达力不行。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1964 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:23 · PVG 00:23 · LAX 08:23 · JFK 11:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.