目录
TypeError: builtin_function_or_method object is not iterable
- 类型错误:builtin_function_or_method 对象不可迭代
- TypeError:“方法”对象在 Python 中不可迭代
- 类型错误:“方法”类型的参数不可迭代
- builtin_function_or_method 类型的参数不可迭代
- TypeError: ‘function’ 对象在 Python 中不可迭代
TypeError: builtin_function_or_method 对象不可迭代
Python“TypeError: builtin_function_or_method object is not iterable”发生在我们尝试迭代内置函数时,因为我们忘记调用它。
要解决该错误,请确保调用带括号的内置函数,例如my_dict.keys()
.
下面是错误如何发生的示例。
my_dict = {'name': 'Bobby Hadz', 'age': 30} # ⛔️ TypeError: 'builtin_function_or_method' object is not iterable for key in my_dict.keys: # 👈️ forgot to call function print(key)
我们忘记调用带括号的内置函数,例如my_dict.keys()
,所以我们的代码实际上尝试迭代函数而不是迭代器。
调用带括号的内置方法
要解决错误,请确保调用内置函数。
my_dict = {'name': 'Bobby Hadz', 'age': 30} for key in my_dict.keys(): print(key) # 👉️ name, age for value in my_dict.values(): print(value) # 👉️ Bobby Hadz, 30
我们使用括号来调用内置函数,所以现在我们迭代函数返回的可迭代对象。
错误发生的另一个例子
这是使用该方法时如何发生错误的另一个示例str.split()
。
my_str = 'a,b,c' # ⛔️ TypeError: 'builtin_function_or_method' object is not iterable for el in my_str.split: print(el)
我们忘记调用str.split()
导致错误的方法。
my_str = 'a,b,c' for el in my_str.split(','): print(el) # 👉️ a, b, c
添加括号以调用该方法可以解决问题。
确保你不使用内置函数和方法的名称
确保您没有定义与内置函数或方法同名的变量或函数。
通过重新定义来隐藏内置方法通常会导致错误。
如果需要检查对象是否可迭代,请使用
try/except 语句。
my_str = 'hello' try: my_iterator = iter(my_str) for i in my_iterator: print(i) # 👉️ h, e, l, l, o except TypeError as te: print(te)
如果传入的值不支持该方法或序列协议(该方法),则iter ()函数会引发一个异常
。TypeError
__iter__()
__getitem__()
如果我们将一个不可迭代的对象(如函数)传递给该函数iter()
,则该
except
块将运行。
可迭代对象的示例包括所有序列类型(list
、str
、tuple
)和一些非序列类型,如dict
、文件对象和其他定义__iter__()
或__getitem__()
方法的对象。
TypeError: ‘method’ 对象在 Python 中不可迭代
Python“TypeError: ‘method’ object is not iterable”发生在我们尝试迭代方法而不是可迭代对象(例如列表)时。
要解决该错误,请确保调用带有括号的方法,例如,
my_method()
如果它返回一个可迭代对象。
下面是错误如何发生的示例。
class Employee(): def get_list(self): return ['Alice', 'Bobby', 'Carl'] emp = Employee() # ⛔️ TypeError: 'method' object is not iterable for el in emp.get_list: # 👈️ forgot to call method print(el)
我们忘记调用带有括号的方法,例如emp.get_list()
,所以我们的代码实际上尝试遍历方法而不是列表。
调用带括号的方法
要解决错误,请确保调用该方法。
class Employee(): def get_list(self): return ['Alice', 'Bob', 'Carl'] emp = Employee() for el in emp.get_list(): print(el) # 👉️ Alice, Bob, Carl
我们使用括号来调用该方法,因此现在我们迭代该方法返回的列表。
有一个同名的变量和方法
错误的另一个常见原因是变量和方法共享相同的名称。
class Employee(): get_list = ['Dean', 'Emma'] def get_list(self): return ['Alice', 'Bob', 'Carl'] emp = Employee() # ⛔️ TypeError: 'method' object is not iterable for el in emp.get_list: print(el)
该方法隐藏了具有相同名称的变量,因此当我们尝试遍历列表时,我们实际上最终遍历了该方法。
要解决错误,请重命名方法或变量。
class Employee(): my_list = ['Dean', 'Emma'] def get_list(self): return ['Alice', 'Bob', 'Carl'] emp = Employee() for el in emp.my_list: print(el) # 👉️ Dean, Emma
如果需要检查对象是否可迭代,请使用try/except
语句。
my_str = 'hello' try: my_iterator = iter(my_str) for i in my_iterator: print(i) # 👉️ h, e, l, l, o except TypeError as te: print(te)
如果传入的值不支持该方法或序列协议(该方法),则iter ()函数会引发一个异常
。TypeError
__iter__()
__getitem__()
如果我们将一个不可迭代的对象(如方法)传递给函数iter()
,该
except
块就会运行。
可迭代对象的示例包括所有序列类型(list
、str
、tuple
)和一些非序列类型,如dict
、文件对象和其他定义__iter__()
或__getitem__()
方法的对象。
TypeError: ‘method’ 类型的参数不可迭代
Python “TypeError: argument of type ‘method’ is not iterable” 发生在我们将in
ornot in
运算符与方法一起使用但忘记调用它时。
要解决错误,请确保调用该方法。
下面是错误如何发生的示例。
class Employee(): def get_list(self): return ['Alice', 'Bobby', 'Carl'] emp = Employee() # ⛔️ TypeError: argument of type 'method' is not iterable print('Alice' in emp.get_list) # 👈️ forgot to call method
我们忘记用括号调用方法,例如emp.get_list()
.
因此,我们的代码实际上尝试检查方法中的成员资格而不是列表中的成员资格。
调用带括号的方法
要解决错误,请确保调用该方法。
class Employee(): def get_list(self): return ['Alice', 'Bob', 'Carl'] emp = Employee() print('Alice' in emp.get_list()) # 👉️ True print('Alice' not in emp.get_list()) # 👉️ False
我们使用括号来调用方法,所以现在我们检查列表中的成员而不是方法。
in 运算符测试成员资格。例如,如果是 的成员
,则x in s
计算为,否则计算为。True
x
s
False
my_str = 'hello world' print('world' in my_str) # 👉️ True print('another' in my_str) # 👉️ False
x
not in返回ins
的否定。x
s
所有内置序列和集合类型都支持in
andnot in
运算符。
与字典一起使用时,运算符会检查对象中是否存在指定的键dict
。
builtin_function_or_method 类型的参数不可迭代
in
Python“TypeError: argument of type ‘builtin_function_or_method’ is not iterable”发生在我们将ornot in
运算符与内置函数一起使用但忘记调用它时。
要解决该错误,请确保调用内置函数,例如
my_dict.keys()
.
下面是错误如何发生的示例。
my_dict = {'id': 1, 'name': 'Bobby Hadz'} # ⛔️ TypeError: argument of type 'builtin_function_or_method' is not iterable print('id' in my_dict.keys) # 👈️ forgot to call function
我们忘记调用带有括号的内置函数,例如my_dict.keys()
,所以我们的代码实际上试图检查函数中的成员资格而不是对象中的成员资格dict_keys
。
调用带括号的内置函数
要解决错误,请确保调用内置函数。
my_dict = {'id': 1, 'name': 'Bobby Hadz'} print('id' in my_dict.keys()) # 👉️ True
我们使用括号来调用内置函数,所以现在我们检查可迭代对象而不是函数中的成员资格。
这是错误如何发生的另一个示例。
my_str = 'a,b,c' # ⛔️ TypeError: argument of type 'builtin_function_or_method' is not iterable print('a' in my_str.split) # 👈️ forgot to call function
要解决该错误,请调用str.split()
带括号的方法。
my_str = 'a,b,c' print('a' in my_str.split(',')) # 👉️ True my_other_str = 'HELLO WORLD' print('hello' in my_other_str.lower()) # 👉️ True
添加括号以调用该方法可以解决问题。
in 运算符测试成员资格。例如,如果是 的成员
,则x in s
计算为,否则计算为。True
x
s
False
my_str = 'hello world' print('world' in my_str) # 👉️ True print('another' in my_str) # 👉️ False
x
not in返回ins
的否定。x
s
所有内置序列和集合类型都支持in
andnot in
运算符。
与字典一起使用时,运算符会检查对象中是否存在指定的键dict
。
TypeError: ‘function’ 对象在 Python 中不可迭代
Python“TypeError: ‘function’ object is not iterable”发生在我们尝试迭代函数而不是可迭代对象(例如列表)时。
要解决错误,请确保调用该函数,例如,my_func()
如果它返回一个可迭代对象。
下面是错误如何发生的示例。
def get_list(): return ['a', 'b', 'c'] # ⛔️ TypeError: 'function' object is not iterable for el in get_list: # 👈️ forgot to call function print(el)
get_list()
,所以我们的代码试图遍历函数而不是列表。要解决错误,请确保调用该函数。
def get_list(): return ['a', 'b', 'c'] for el in get_list(): print(el) # 👉️ a, b, c
我们使用括号来调用函数,所以现在我们迭代函数返回的列表。
错误的另一个常见原因是变量和函数同名。
get_list = ['f', 'g'] def get_list(): return ['a', 'b', 'c'] # ⛔️ TypeError: 'function' object is not iterable for el in get_list: print(el)
该函数隐藏了具有相同名称的变量,因此当我们尝试遍历列表时,我们实际上最终遍历了该函数。
要解决错误,请重命名函数或变量。
my_list = ['f', 'g'] def get_list(): return ['a', 'b', 'c'] for el in my_list: print(el) # 👉️ f, g
如果需要检查对象是否可迭代,请使用try/except
语句。
my_str = 'hello' try: my_iterator = iter(my_str) for i in my_iterator: print(i) # 👉️ h, e, l, l, o except TypeError as te: print(te)
如果传入的值不支持该方法或序列协议(该方法),则iter ()函数会引发一个异常
。TypeError
__iter__()
__getitem__()
如果我们将一个不可迭代的对象(如函数)传递给该函数iter()
,则该
except
块将运行。
可迭代对象的示例包括所有序列类型(list
、str
、tuple
)和一些非序列类型,如dict
、文件对象和其他定义__iter__()
或__getitem__()
方法的对象。
额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: