Python TypeError: 'buildin_function_or_method' object is not iterable 的解决方案

92 阅读4分钟

一个可迭代对象是Python中的一个数据值,可以使用for 循环进行迭代。列表、元组、字典、字符串和集合是一些常用的可迭代对象。但是如果我们试图在一个非可迭代对象上迭代,比如一个内置的函数或方法,Python会抛出TypeError: 'builtin_function_or_method' object is not iterable 错误。

这个Python教程详细讨论了以下错误,并处理了一些常见的情景示例。在本教程结束时,你将对如何解决这个错误有一个完整的概念。

让我们从错误语句开始。

Python 问题 TypeError: 'biltin_function_or_method' 对象不是可迭代的。

我们通常使用内置函数或方法,对一个对象进行原地操作或返回一些值。

例如,通过int()函数,我们可以将一个字符串或浮点数转换成一个整数,并将返回值存储到一个新的标识符中。

例子

#string number
str_num = "99930"

#integer number
int_num = int(str_num)

print(str_num)   #'99930'
print(int_num)   #99930


int()函数没有对str_num ,而是复制了str_num的值并将其转换为一个整数,然后返回。 然后我们将返回的值存储到int_num

但是有一些方法,比如sort(),会执行原地操作并返回None。

#list
marks = [748, 936, 687, 957, 947]

#sort the list
marks.sort() #method perfrom the inplace operation

print(marks)

输出

[687, 748, 936, 947, 957]

每当我们调用一个函数时,我们首先应该知道这个函数或方法将返回什么。有许多内置的方法,如 sorted(), dictionary's items(), and keys() 都返回一个可迭代的对象。如果我们知道内置函数或方法将返回一个可迭代的对象,那么我们就应该使用for a loop来迭代它。

我们不对函数进行迭代,而是对函数或方法返回的值进行迭代。该函数只有在我们调用它时才会返回一个值。要调用一个函数,我们需要写出函数或方法的名称,然后加上一组括号 **()**.如果我们忘记给函数加上括号,函数将不会被调用,并且会引发TypeError: 'builtin_function_or_method' object is not iterable

常见的示例情况

mobiles = {"iPhone 13":179999,
           "Samsung s21":109400,
           "OnePluse 9":65999,
           "Vivo X70 pro":799990,
           "OnePlus Nord 2":27999,
           }

#iterate over dictionary items
for mobile, price in mobiles.items:  #error 
    print(f"{mobile} = {price}")

输出

Traceback (most recent call last):
  File "main.py", line 10, in 
    for mobile, price in mobiles.items:
TypeError: 'builtin_function_or_method' object is not iterable

破解错误

当我们执行上面的例子时,它抛出了*"TypeError: 'buildin_function_or_method' object is not iterable"* 错误。

该错误语句有两个部分

  1. 类型错误
  2. builtin_function_or_method'对象不是可迭代的。

1.TypeError

这是一个标准的Python异常。当我们对一个Python对象进行无效的操作时,Python会在程序中引发TypeError。

在上面的例子中,我们收到了这个错误,因为我们试图对一个函数进行迭代,for 循环只能对可迭代的对象进行迭代,而函数不是可迭代的对象。

2.'buildin_function_or_method'对象不是可迭代的

这是一个错误信息,告诉我们,我们正试图对一个内置的函数或方法进行迭代。

在上面的例子中,我们试图遍历mobiles.items ,这是一个内置的字典方法。

解决办法

在上面的例子中,我们试图遍历prices.items ,这意味着我们在遍历函数,而不是返回值。要从一个函数中获得返回值,我们需要在方法或函数名称后面加上括号来调用该函数。

mobiles = {"iPhone 13":179999,
           "Samsung s21":109400,
           "OnePluse 9":65999,
           "Vivo X70 pro":799990,
           "OnePlus Nord 2":27999,
           }

#iterate over dictionary items
for mobile, price in mobiles.items():  #solved  
    print(f"{mobile} = {price}")

输出

iPhone 13 = 179999
Samsung s21 = 109400
OnePluse 9 = 65999
Vivo X70 pro = 799990
OnePlus Nord 2 = 27999

现在代码运行没有任何错误。

总结

在Python程序中,当我们对一个内置的函数或方法进行for循环时,会出现*"TypeError: 'biltin_function_or_method' object is not iterable "* 错误。为了解决这个问题,我们需要做的是在方法的返回语句上进行迭代,而不是在方法名称上。方法或函数只有在我们调用它们时才会返回值,要调用一个函数,我们需要在方法或函数名称后面加上圆括号,并加上强制性参数。