一个可迭代对象是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"* 错误。
该错误语句有两个部分
- 类型错误
- 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 "* 错误。为了解决这个问题,我们需要做的是在方法的返回语句上进行迭代,而不是在方法名称上。方法或函数只有在我们调用它们时才会返回值,要调用一个函数,我们需要在方法或函数名称后面加上圆括号,并加上强制性参数。