在 Python 中,一个常见的错误信息如下:
'builtin_function_or_method' object is not subscriptable技术支持
当函数或方法后面跟着方括号 [] 表示法时,Python 会抛出此错误。然而,函数是可调用对象,因此需要使用圆括号 ()(有时也称为小括号)。
让我们看一个会引发此错误的示例:
numbers = [2, 4, 6, 8]
numbers.append[10]技术支持
Traceback (most recent call last):
...
TypeError: 'builtin_function_or_method' object is not subscriptable技术支持
下面一节将更详细地探讨这个错误。
理解该错误
Python 函数是可调用对象,这意味着我们可以在函数名后使用圆括号来执行函数定义中的代码。Python 中最常见的内置函数之一是 print():
print("This is a built-in function")技术支持
This is a built-in function技术支持
圆括号用于在 Python 中调用函数。然而,使用方括号而不是圆括号会引发错误:
print["This is a built-in function"]技术支持
Traceback (most recent call last):
...
TypeError: 'builtin_function_or_method' object is not subscriptable技术支持
让我们将错误信息拆分为关键部分:
- “builtin_function_or_method” 对象
- 不可下标(not subscriptable)
在上面的示例中,print() 是一个内置函数。描述中还提到了方法,即属于某个类的函数。Python 为其数据类型提供了许多内置方法。再看一个会引发此错误的信息的例子:
name = "DataCamp"
print(name.count["a"])技术支持
Traceback (most recent call last):
...
TypeError: 'builtin_function_or_method' object is not subscriptable技术支持
与一般函数一样,.count() 方法需要使用圆括号:
print(name.count("a"))技术支持
3技术支持
这种情况与引言中的示例类似,其中包含列表方法 .append()。以下是使用圆括号的正确写法:
numbers = [2, 4, 6, 8]
numbers.append(10)
print(numbers)技术支持
[2, 4, 6, 8, 10]技术支持
TypeError: 'function' object is not subscriptable
对于用户自定义函数,Python 会抛出类似的错误:
def greet_person(name):
print(f"Hello {person}")
greet_person["James"]技术支持
Traceback (most recent call last):
...
TypeError: 'function' object is not subscriptable技术支持
不过,函数 greet_person() 并不是 Python 的内置函数。错误信息表明这是一个 “function”,而不是 “builtin_function_or_method”。
错误信息的第二部分涉及 “subscriptable”(可下标)这一术语。如果我们可以使用方括号访问其元素,那么该 Python 对象就是可下标的。一个常见的可下标对象示例是 序列(sequence),其可以使用方括号进行索引:
print(numbers[0])
print(numbers[-1])
print(numbers[1:4])技术支持
2
10
[4, 6, 8]技术支持
元组和字符串也是序列的其他示例,因此它们同样是可下标的:
more_numbers = 10, 30, 50
print(more_numbers[0])
name = "DataCamp"
print(name[0])技术支持
10
'D'技术支持
Python 的 映射(mapping)也可下标。Python 中最常见的映射是字典:
points = {"James": 10, "Mary": 14}
print(points["Mary"])技术支持
14技术支持
在方括号中使用的是字典键,而不是索引。
Python:可调用与可下标
序列和映射是可下标的 Python 对象示例。我们可以在对象名后使用方括号,从数据结构中访问其中的对象。若某个 Python 类定义了 .__getitem__() 特殊方法,那么该类创建的对象就是可下标的。
函数和方法是可调用对象的示例。我们可以在对象名后使用圆括号来调用它们。调用函数或方法会执行函数定义中的代码。
类是另一种可调用的 Python 对象。调用类会创建其实例。一般而言,如果某个对象所属的类定义了 .__call__() 特殊方法,则该对象就是可调用的。
当我们尝试调用一个不可调用的对象时,Python 会抛出类似的错误信息:
numbers = [2, 4, 6, 8]
print(numbers(0))技术支持
Traceback (most recent call last):
...
TypeError: 'list' object is not callable技术支持
变量 numbers 是一个列表,不可调用。正确的方式是使用方括号访问列表的第一个元素:numbers[0]。函数、方法和类是 Python 中最常见的可调用对象。
修复 'builtin_function_or_method' object is not subscriptable
当函数或方法后面跟着方括号时,Python 会抛出 ``'builtin_function_or_method' object is not subscriptable` 错误信息。请留意函数或方法名后紧跟的方括号,并将其替换为圆括号。
在某些情况下,函数或方法的参数是一个使用方括号定义的列表。但请注意,该列表是在圆括号内定义的:
number_of_values = len([10, 30, 50])
print(number_of_values)
numbers = [2, 4, 6, 8]
numbers.extend([10, 12])
print(numbers)技术支持
3
[2, 4, 6, 8, 10, 12]技术支持
在这些示例中,函数或方法名后面跟着的是圆括号。圆括号内的参数是一个列表。用于定义列表的方括号记法,与用于序列、映射和其他可下标对象的方括号记法是不同的。
调试提示
您可以做的一件事是使用内置的 type() 函数检查对象类型:
print(type(print))
numbers = [2, 4, 6, 8]
print(type(numbers.append))技术支持
<class 'builtin_function_or_method'>技术支持
输出结果确认该对象是内置函数或方法,因此是可调用的。还有一个名为 callable() 的内置函数,如果其参数可被调用,则返回 True:
print(callable(numbers.append))技术支持
True技术支持
其他可考虑的调试提示:
- 检查所使用的是方括号还是圆括号。可调用对象(如函数和方法)后面需要使用圆括号。方括号用于序列、映射和其他可下标对象。
- 在错误信息中寻找与内置函数或方法以及可下标对象相关的线索。错误信息中的行号会指向包含错误的那一行。
结论
像 Python 这样的编程语言会为不同目的使用不同的符号。方括号用于紧跟在对象名后,从数据结构中访问某个元素。这种方括号记法适用于可下标对象。当方括号不紧跟在对象名后时,它也用于创建列表。
圆括号用于在对象名后调用对象。函数和方法是 Python 中可调用对象的例子。圆括号在 Python 中也与元组相关,并在需要时用于对语句的部分进行分组。
当内置函数或方法后面跟着方括号时,Python 会抛出异常 'builtin_function_or_method' object is not subscriptable。调用函数或方法的正确方式是使用圆括号。
您可以在 DataCamp 的 Python 函数:如何调用与编写函数一文中阅读更多内容。
在 Python 中,一个常见的错误信息如下:
当函数或方法后面跟着方括号
[]表示法时,Python 会抛出此错误。然而,函数是可调用对象,因此需要使用圆括号()(有时也称为小括号)。让我们看一个会引发此错误的示例:
下面一节将更详细地探讨这个错误。
理解该错误
Python 函数是可调用对象,这意味着我们可以在函数名后使用圆括号来执行函数定义中的代码。Python 中最常见的内置函数之一是
print():圆括号用于在 Python 中调用函数。然而,使用方括号而不是圆括号会引发错误:
让我们将错误信息拆分为关键部分:
在上面的示例中,
print()是一个内置函数。描述中还提到了方法,即属于某个类的函数。Python 为其数据类型提供了许多内置方法。再看一个会引发此错误的信息的例子:与一般函数一样,
.count()方法需要使用圆括号:这种情况与引言中的示例类似,其中包含列表方法
.append()。以下是使用圆括号的正确写法:TypeError: 'function' object is not subscriptable
对于用户自定义函数,Python 会抛出类似的错误:
不过,函数
greet_person()并不是 Python 的内置函数。错误信息表明这是一个 “function”,而不是 “builtin_function_or_method”。错误信息的第二部分涉及 “subscriptable”(可下标)这一术语。如果我们可以使用方括号访问其元素,那么该 Python 对象就是可下标的。一个常见的可下标对象示例是 序列(sequence),其可以使用方括号进行索引:
元组和字符串也是序列的其他示例,因此它们同样是可下标的:
Python 的 映射(mapping)也可下标。Python 中最常见的映射是字典:
在方括号中使用的是字典键,而不是索引。
Python:可调用与可下标
序列和映射是可下标的 Python 对象示例。我们可以在对象名后使用方括号,从数据结构中访问其中的对象。若某个 Python 类定义了
.__getitem__()特殊方法,那么该类创建的对象就是可下标的。函数和方法是可调用对象的示例。我们可以在对象名后使用圆括号来调用它们。调用函数或方法会执行函数定义中的代码。
类是另一种可调用的 Python 对象。调用类会创建其实例。一般而言,如果某个对象所属的类定义了
.__call__()特殊方法,则该对象就是可调用的。当我们尝试调用一个不可调用的对象时,Python 会抛出类似的错误信息:
变量
numbers是一个列表,不可调用。正确的方式是使用方括号访问列表的第一个元素:numbers[0]。函数、方法和类是 Python 中最常见的可调用对象。修复 'builtin_function_or_method' object is not subscriptable
当函数或方法后面跟着方括号时,Python 会抛出 ``'builtin_function_or_method' object is not subscriptable` 错误信息。请留意函数或方法名后紧跟的方括号,并将其替换为圆括号。
在某些情况下,函数或方法的参数是一个使用方括号定义的列表。但请注意,该列表是在圆括号内定义的:
在这些示例中,函数或方法名后面跟着的是圆括号。圆括号内的参数是一个列表。用于定义列表的方括号记法,与用于序列、映射和其他可下标对象的方括号记法是不同的。
调试提示
您可以做的一件事是使用内置的
type()函数检查对象类型:输出结果确认该对象是内置函数或方法,因此是可调用的。还有一个名为
callable()的内置函数,如果其参数可被调用,则返回True:其他可考虑的调试提示:
结论
像 Python 这样的编程语言会为不同目的使用不同的符号。方括号用于紧跟在对象名后,从数据结构中访问某个元素。这种方括号记法适用于可下标对象。当方括号不紧跟在对象名后时,它也用于创建列表。
圆括号用于在对象名后调用对象。函数和方法是 Python 中可调用对象的例子。圆括号在 Python 中也与元组相关,并在需要时用于对语句的部分进行分组。
当内置函数或方法后面跟着方括号时,Python 会抛出异常
'builtin_function_or_method' object is not subscriptable。调用函数或方法的正确方式是使用圆括号。您可以在 DataCamp 的 Python 函数:如何调用与编写函数一文中阅读更多内容。