繁体   English   中英

使用Python断言 - 如何检查输入是否为整数?

[英]Assert using Python- How do I check if the input is Integer or not?

我写了一个函数,它将一个数字作为输入。 例如:

def return_it_back(n):
    return n

我只需要使用assert检查输入是否为整数。 所以,我写了一个测试函数:

def test():
    assert return_it_back("k"), "incorrect input"
test()

Python没有显示“输入错误”。 断言return_it_back(“k”),“输入错误”是否需要打印“错误输入”?

assert condition, message只是语法糖:

if not condition:
    raise AssertionError(message)

在你的代码中, return_it_back()只返回它的参数,所以

assert return_it_back(n), message

相当于

assert n, message

这相当于

if not n:
    raise AssertionError(message)

所以测试的是n的真值,无论它是什么。

在Python中,所有对象都有一个布尔值 - 空集合(至少是内置的),空字符串,数字零和None错值,大多数其他对象默认为真值。

IOW,除非n是一个空集合,空字符串,数字零或None它将eval为True并且断言将成功。

如果要测试对象是否属于给定类(或类列表),可以使用isinstance(obj, cls) (或isinstance(obj, cls, othercls, etc) )。 Typechecking参数通常被认为是unpythonic(只要对象按预期运行,谁关心它是什么类型,AKA 鸭子打字 ),但有几个地方有意义 - 清理用户输入,在子系统边界,并最终当保证任何其他类型都会以这种或那种方式破坏功能时。

此外, assert是一个编码器工具,而不是用于参数验证的东西 - 如果您的代码是使用--optimize标志编译的,例如断言语句将被忽略。 Iow它适用于单元测试(但是在unittest包中有更高级的工具)或调试但不适用于生产代码。 如果你真的想阻止你的函数接受除了int之外的任何东西,你应该引发一个TypeError (或者如果你想要一个正整数而得到一个负数,则会引入一个ValueError )。

有几种方法,一种可能

def return_it_back(n):
    assert type(n) == int, "Incorrect input"
    return n

return_it_back(123)
return_it_back('123')

这显然会在第二次尝试时中断。


您还可以在尝试时检查返回值

 def return_it_back(n): return n assert type(return_it_back(123)) == int, "Incorrect input" assert type(return_it_back('123')) == int, "Incorrect input" 

但这是多余的,因此不被视为“pythonic”。 采取第一种选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM