我如何断言该参数仅包含Python中列出的整数

时间:2017-11-15 11:14:17

标签: python type-conversion int arguments

我在Python中有一个方法,我只想接受列出的或整数的整数,我该如何定义它?

def autoInt(integers):
    assert int(integers)
    assert len(integers) > 0

这失败了,因为我没有列表。我确定这很简单。

  

TypeError:int()参数必须是字符串或数字,而不是' list'

编辑:我的任务是这个方法只能接受列表中的整数。

3 个答案:

答案 0 :(得分:2)

这取决于您的定义以整数形式传递的内容。例如,bool的实例是否计数?是浮动1.0

无论如何 - 你可以将all内置函数与生成器表达式结合起来。

>>> a = [1,2,True]
>>> all(isinstance(x, int) for x in a)
True
>>> all(type(x) == int for x in a)
False

作为旁注:严格检查参数类型,而不是Python程序员在没有特定原因时所做的事情。更好的方法通常是编写清晰的文档字符串和/或类型提示。

Here是一个解释如何做后者的答案。除此之外,通常还有"垃圾 - >垃圾(或错误)"心态。

答案 1 :(得分:1)

您可以测试这样的整数列表:

assert(all(isinstance(item, int) for item in integers))

来自How to test if every item in a list of type 'int'?

答案 2 :(得分:0)

>>> my_list = [1, 2, 3.25]
>>> all(isinstance(item, int) for item in my_list)
False
>>> other_list = range(3)
>>> all(isinstance(item, int) for item in other_list)
True
>>> 

来源: https://stackoverflow.com/a/6009630/6748523