我正在编写一个类,它__init__使用id或slug参数,但不能同时使用.我想验证参数是否符合预期.使用一个assert用于验证关于参数的假设的特定目的是否合适和良好实践,或者如果参数不符合预期,我是否应该提出异常?
例如,
def __init__(self, id=None, slug=None):
assert((id or slug) and not (id and slug))
Run Code Online (Sandbox Code Playgroud)
小智 9
原始问题的答案("使用断言来验证python中的内部假设是不好的做法?")绝对没有.这是每个人都同意断言有益的一件事.但是你在问题中描述的不是内部假设的验证:它是对外部输入的验证.A TypeError,a ValueError,另一个内置异常(或者可能是一个自定义异常,尽管应该保守一个)为API用户提供了更有用的反馈.更糟糕的是,断言可能(并且在某些环境中,通常是)被完全删除,这意味着您的代码将默默地做错事.
如果这是关于代码健全性的,正如您所描述的那样,断言是正确的使用方法.如果这是关于输入验证,则不应使用assert.特别是,用户不应该通过向其提供垃圾来触发断言.断言只能由于程序中的错误而触发.
编辑:正如我刚刚从评论中学到的,Python还允许您完全关闭断言(意味着它们不会被评估,因此不会失败).这应该是正确的答案(除了使用像汇编或C这样的不同语言)到性能问题,如果有的话.
| 归档时间: |
|
| 查看次数: |
1124 次 |
| 最近记录: |