目录
TypeError: ‘list’ object cannot be interpreted as an integer
TypeError: ‘list’ 对象不能解释为整数
当我们将列表传递给需要整数参数的函数时,会出现 Python“TypeError:‘list’对象不能被解释为整数”,例如
range()
.
要解决错误,请传递列表的长度或将整数传递给函数。
下面是错误如何发生的示例。
my_list = ['a', 'b', 'c'] # 👇️ expects to get called with an integer but is called with a list # ⛔️ TypeError: 'list' object cannot be interpreted as an integer for i in range(my_list): print(i)
range
函数需要一个整数作为参数,但是,我们使用列表调用该函数。将整数而不是列表传递给函数
为了解决这个错误,我们必须向函数传递一个整数而不是列表。
例如,您可以将列表的长度作为参数传递给函数。
my_list = ['a', 'b', 'c'] for i in range(len(my_list)): print(i) # 👉️ 0, 1, 2 print(len(my_list)) # 👉️ 3
len ()函数返回对象的长度(项目数)。
我们将列表 (3) 的长度传递给函数,以创建一个从开始到 的range()
范围对象。0
2
遍历 Python 中的列表
如果您打算遍历列表,请删除对range()
.
my_list = ['a', 'b', 'c'] # ✅ iterating over a list for item in my_list: print(item) # 👉️ 'a', 'b', 'c'
如果在遍历列表时需要访问当前迭代的索引,请使用该enumerate()
函数。
my_list = ['a', 'b', 'c'] # ✅ iterate over a list with access to the index for idx, item in enumerate(my_list): print(idx, item) # 👉️ 0 a, 1 b, 2 c
enumerate函数接受一个可迭代对象并返回一个包含元组的枚举对象,其中第一个元素是索引,第二个元素是相应的项目。
range()
函数将整数作为参数,但我们向该函数传递了一个列表。range函数通常用于在循环中循环特定次数for
,并采用以下参数:
姓名 | 描述 |
---|---|
start |
表示范围开始的整数(默认为0 ) |
stop |
向上,但不包括提供的整数 |
step |
范围将由每 N 个数字组成,从start 到stop (默认为1 ) |
print(list(range(3))) # 👉️ [0, 1, 2] print(list(range(1, 4))) # 👉️ [1, 2, 3] print(list(range(1, 4))) # 👉️ [1, 2, 3]
如果您只将一个参数传递给range()
构造函数,则它被认为是参数的值stop
。
使用list.pop()
列表而不是整数调用函数
确保您没有list.pop()
使用列表而不是整数来调用该方法。
a_list = ['a', 'b', 'c'] # ⛔️ TypeError: 'list' object cannot be interpreted as an integer a_list.pop([1])
list.pop方法删除列表中给定位置的项目并将其返回。
您应该在调用方法时传递一个整数pop()
来解决错误。
a_list = ['a', 'b', 'c'] a_list.pop(1) print(a_list) # 👉️ ['a', 'c']
如果未指定索引,该pop()
方法将删除并返回列表中的最后一项。
my_list = ['bobby', 'hadz', 'com'] my_list.pop() print(my_list) # 👉️ ['bobby', 'hadz']
len(my_list)
作为参数传递给该函数,要么找出代码中为变量分配列表的位置。错误地将变量重新分配给整数
确保您没有声明最初存储整数的变量并在代码中的某处覆盖它。
my_int = 10 # 👇️ reassigned variable to a list by mistake my_int = ['a', 'b', 'c'] # 👇️ function expects to be called with an integer argument # ⛔️ TypeError: 'list' object cannot be interpreted as an integer result = range(my_int)
我们最初将my_int
变量设置为一个整数,但后来将其重新分配给一个列表。
您必须找到为变量分配列表的位置并更正分配。
检查变量存储的类型
如果不确定变量存储的类型,可以使用type
和函数。isinstance
a_list = ['a', 'b', 'c'] print(type(a_list)) # 👉️ <class 'list'> print(isinstance(a_list, list)) # 👉️ True an_int = 100 print(type(an_int)) # 👉️ <class 'int'> print(isinstance(an_int, int)) # 👉️ True
类型类返回对象的类型。
如果传入的对象是传入类的实例或子类,则isinstance函数返回
。True
目录
TypeError: 元组对象不能解释为整数
当我们将元组传递给需要整数参数的函数时,会出现 Python“TypeError: ‘tuple’ object cannot be interpreted as an integer”。
要解决该错误,请解压缩元组或访问特定索引处的元组元素。
下面是错误如何发生的示例。
import numpy as np my_tuple = (2, 4) # ⛔️ TypeError: 'tuple' object cannot be interpreted as an integer print(np.random.randn(my_tuple))
这是另一个例子。
my_tuple = (2, 4) # ⛔️ TypeError: 'tuple' object cannot be interpreted as an integer for i in range(my_tuple): print(i)
我们有一个包含 2 个元素的元组,但是random.randn()
和range()
函数需要整数参数而不是元组。
my_tuple = (1, 2) print(my_tuple) # 👉️ (1, 2) print(type(my_tuple)) # 👉️ <class 'tuple'>
访问特定索引处的元组
如果您的元组存储整数,解决该错误的一种方法是访问特定索引处的元组。
import numpy as np my_tuple = (2, 4) # ✅ works print(np.random.randn(my_tuple[0], my_tuple[1]))
这是一个使用内置range()
函数的示例。
my_tuple = (2, 4) # ✅ works for i in range(my_tuple[0], my_tuple[1]): print(i)
在函数调用中使用解包
如果您的元组存储的元素与函数的参数一样多,您可以在函数调用中解压元组。
import numpy as np my_tuple = (2, 4) # ✅ works print(np.random.randn(*my_tuple)) # ✅ works for i in range(*my_tuple): print(i)
您可以想象*my_tuple
语法将元组的两个元素解包并将它们作为单独的参数传递给函数。
错误地将整数变量设置为元组
确保您没有声明最初存储整数的变量并在代码中的某处覆盖它。
my_int = 10 my_int = 15, # 👈️ note: the trailing comma creates a tuple print(type(my_int)) # 👉️ <class 'tuple'> # ⛔️ TypeError: 'tuple' object cannot be interpreted as an integer for i in range(my_int): print(i)
我们最初将my_int
变量设置为一个整数,但后来将其重新分配给一个元组。
在这种情况下,您必须追踪变量在何处分配了元组并更正分配。
元组在 Python 中是如何构造的
元组有多种构造方式:
- 使用一对括号
()
创建一个空元组 - 使用尾随逗号 –
a,
或(a,)
- 用逗号分隔项目 –
a, b
或(a, b)
- 使用
tuple()
构造函数
NoneType 对象不能解释为整数 – Python
None
当我们将值传递给需要整数参数的函数时,会出现 Python“TypeError: ‘NoneType’ object cannot be interpreted as an integer” 。
要解决该错误,请追踪该None
值的来源并将一个整数传递给该函数。
下面是错误如何发生的示例。
# ⛔️ TypeError: 'tuple' object cannot be interpreted as an integer for i in range(None): print(i)
我们将一个None
值传递给range()
构造函数,该构造函数希望使用整数进行调用。
在调用函数之前检查变量是否为 None
您可以
在调用函数之前检查变量是否未存储 None 值。
my_num = None if my_num is not None: for i in range(my_num): print(i) else: print('variable is None')
if
仅当my_num
变量不存储值时,该块才会运行None
,否则,该else
块将运行。
您还可以提供变量的默认值 is None
。
my_num = None if my_num is None: my_num = 3 for i in range(my_num): print(i) # 👉️ 0, 1, 2
我们检查变量是否是None
,如果是,我们将变量设置为3
。
追踪变量赋值的None
位置
要解决错误,我们必须找出None
值的来源并更正赋值。
最常见的None
值来源(显式赋值除外)是不返回任何内容的函数。
# 👇️ this function returns None def get_num(a, b): print(a + b) # ⛔️ TypeError: 'NoneType' object cannot be interpreted as an integer for i in range(get_num(5, 5)): print(i)
请注意,我们的get_num
函数没有显式返回值,因此它隐式返回 None。
确保从函数返回一个值。
def get_num(a, b): return a + b for i in range(get_num(1, 2)): print(i) # 👉️ 0, 1, 2
我们使用return 语句从函数返回一个值,并将一个整数传递给函数range()
。
出现错误的原因有多种:
- 有一个不返回任何东西的函数(
None
隐式返回)。 - 将变量显式设置为
None
. - 将变量分配给调用不返回任何内容的内置函数的结果。
- 具有仅在满足特定条件时才返回值的函数。
None
。仅当满足条件时才返回整数的函数
错误的另一个常见原因是具有仅在满足条件时才返回值的函数。
def get_num(a): if a > 100: return a result = get_num(5) print(result) # 👉️ None
if
函数中的语句仅get_num
在传入的参数大于 时运行100
。
None
。要解决这种情况下的错误,您要么必须检查函数是否未返回None
,要么在不满足条件时返回默认值。
def get_num(a): if a > 100: return a return 0 # 👈️ returns 0 if condition not met result = get_num(5) print(result) # 👉️ 0
现在,无论条件是否满足,函数都保证返回一个值。