类型错误:“列表”对象不能解释为整数

目录

TypeError: ‘list’ object cannot be interpreted as an integer

  1. TypeError: ‘LIST’ 对象不能解释为整数
  2. TypeError: ‘TUPLE’ 对象不能解释为整数
  3. TypeError: NoneType 对象不能解释为整数

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()范围对象02

遍历 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 个数字组成,从startstop(默认为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

目录

  1. TypeError: ‘TUPLE’ 对象不能解释为整数
  2. TypeError: NoneType 对象不能解释为整数

TypeError: 元组对象不能解释为整数

当我们将元组传递给需要整数参数的函数时,会出现 Python“TypeError: ‘tuple’ object cannot be interpreted as an integer”。

要解决该错误,请解压缩元组或访问特定索引处的元组元素。

typeerror 元组对象不能解释为整数

下面是错误如何发生的示例。

主程序
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语法将元组的两个元素解包并将它们作为单独的参数传递给函数。

我们最终将 2 个整数作为参数传递给函数,而不是单个元组。

错误地将整数变量设置为元组

确保您没有声明最初存储整数的变量并在代码中的某处覆盖它。

主程序
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 nonetype 对象不能解释为整数

下面是错误如何发生的示例。

主程序
# ⛔️ 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()

出现错误的原因有多种:

  1. 有一个不返回任何东西的函数(None隐式返回)。
  2. 将变量显式设置为None.
  3. 将变量分配给调用不返回任何内容的内置函数的结果。
  4. 具有仅在满足特定条件时才返回值的函数。
避免使用会改变原始对象的方法进行赋值,因为它们中的大多数不返回值并隐式返回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

现在,无论条件是否满足,函数都保证返回一个值。