我写了一个函数,它将一个数字作为输入.例如:
def return_it_back(n):
return n
Run Code Online (Sandbox Code Playgroud)
我只需要使用assert检查输入是否为整数.所以,我写了一个测试函数:
def test():
assert return_it_back("k"), "incorrect input"
test()
Run Code Online (Sandbox Code Playgroud)
Python没有显示"输入错误".不将断言return_it_back("K"),"不正确输入"需要打印的"不正确输入"?
assert condition, message 只是语法糖:
if not condition:
raise AssertionError(message)
Run Code Online (Sandbox Code Playgroud)
在你的代码中,return_it_back()只返回它的参数,所以
assert return_it_back(n), message
Run Code Online (Sandbox Code Playgroud)
相当于
assert n, message
Run Code Online (Sandbox Code Playgroud)
这相当于
if not n:
raise AssertionError(message)
Run Code Online (Sandbox Code Playgroud)
所以经过测试的是真实价值n,无论它是什么.
在Python中,所有对象都有一个布尔值 - 空集合(至少是内置的),空字符串,数字零和None假值以及大多数其他对象默认具有真值.
IOW,除非n是一个空集合,空字符串,数字零或None它将eval为True并且断言将成功.
如果要测试对象是否属于给定类(或类列表),可以使用isinstance(obj, cls)(或isinstance(obj, cls, othercls, etc)).Typechecking参数通常被认为是unpythonic(只要对象按预期运行,谁关心它是什么类型,AKA 鸭子打字),但有几个地方有意义 - 清理用户输入,在子系统边界,并最终当保证任何其他类型都会以这种或那种方式破坏功能时.
此外,assert是一个编码器工具,而不是用于参数验证的东西 - 如果您的代码使用--optimize标志编译,例如断言语句将被忽略.Iow它适用于单元测试(但是包中有更多高级工具unittest)或调试但不适用于生产代码.如果你真的想要阻止你的函数接受除了整数以外的任何东西,你应该提高一个TypeError(或者ValueError例如,如果你期望一个正整数并得到一个负数).
| 归档时间: |
|
| 查看次数: |
4587 次 |
| 最近记录: |