目录
TypeError: ‘numpy.ndarray’ object is not callable in Python
如果您收到错误“TypeError: ‘Series’ object is not callable”,请单击第二个副标题。
TypeError: ‘numpy.ndarray’ 对象在 Python 中不可调用
Python“TypeError: ‘numpy.ndarray’ object is not callable”发生在我们尝试像调用函数一样调用数组或对变量和函数使用相同名称时。
要解决该错误,请确保在访问特定索引处的数组元素时使用方括号,例如my_array[0]
.
下面是错误如何发生的示例。
import numpy as np arr = np.array([1, 2, 3, 4]) # ⛔️ TypeError: 'numpy.ndarray' object is not callable print(arr(1)) # 👈️ using parentheses
问题是我们在访问
特定索引处的数组()
时使用圆括号而不是方括号。[]
要解决该错误,请使用方括号访问索引处的数组。
import numpy as np arr = np.array([1, 2, 3, 4]) # ✅ now using square brackets to access index print(arr[0]) # 👉️ 1 print(arr[1]) # 👉️ 2 print(arr[2]) # 👉️ 3 print(arr[3]) # 👉️ 4
Python 索引是从零开始的,因此数组中的第一项的索引为
0
,最后一项的索引为-1
or len(arr) - 1
。
数组切片的语法是arr[start:stop:step]
.
import numpy as np arr = np.array([1, 2, 3, 4]) print(arr[0:2]) # 👉️ [1 2] print(arr[1:3]) # 👉️ [2 3]
索引start
是包含的,stop
索引是排他的(最多,但不包括)。
如果start
省略索引,则认为是0
,如果stop
省略索引,则切片转到列表的末尾。
常见错误原因
出现错误的原因有多种:
()
尝试使用圆括号而不是方括号访问 numpy 数组[]
。- 具有同名的函数和变量。
- 错误地覆盖内置函数并将其设置为数组。
- 具有同名的类方法和类属性。
- 调用一个返回 numpy 数组两次的函数。
函数和变量同名
确保您没有同名的函数和变量。
import numpy as np def example(): return 'bobbyhadz.com' example = np.array([1, 2, 3, 4]) # ⛔️ TypeError: 'numpy.ndarray' object is not callable example()
变量example
隐藏同名函数,所以当我们尝试调用函数时,我们实际上最终调用了变量。
重命名变量或函数可以解决错误。
import numpy as np def example(): return 'bobbyhadz.com' arr = np.array([1, 2, 3, 4]) print(example()) # 👉️ bobbyhadz.com
我们给了变量一个不同的名字,所以它不再与函数冲突。
现在,我们可以毫无问题地调用该函数。
将数组作为带括号的函数调用
确保您没有尝试在代码中将数组作为函数调用。
import numpy as np arr = np.array([1, 2, 3, 4]) # ⛔️ TypeError: 'numpy.ndarray' object is not callable arr() # 👈️ remove parentheses
代码示例尝试将 numpy 数组作为函数调用。
要解决此问题,请删除括号或更正分配。
import numpy as np arr = np.array([1, 2, 3, 4]) print(arr) # 👉️ [1 2 3 4]
如果我们覆盖模块中的类和方法,也会发生该错误numpy
。
例如,不要array
从 NumPy 导入并声明一个命名的变量,
numpy
因为它会影响官方类。
错误地覆盖了一个内置函数
这是错误如何发生的另一个示例。
import numpy as np list = np.array([1, 2, 3, 4]) # ⛔️ TypeError: 'numpy.ndarray' object is not callable list('abc')
我们声明了一个list
变量并将其设置为 NumPy 数组。
变量名与内置list
函数冲突,所以当我们稍后尝试在代码中调用该函数时,我们实际上调用了 NumPy 数组。
要解决该错误,请为变量指定一个与内置函数不冲突的不同名称。
import numpy as np a_list = np.array([1, 2, 3, 4]) print(list('abc')) # 👉️ ['a', 'b', 'c']
该变量不再隐藏内置函数,因此问题已解决。
调用一个返回 NumPy 数组两次的函数
这是错误如何发生的另一个示例。
import numpy as np def get_array(): return np.array([1, 2, 3, 4]) # ⛔️ TypeError: 'numpy.ndarray' object is not callable get_array()()
请注意,我们在调用该函数时使用了两组括号get_array
。
第一组括号调用函数,函数返回一个 NumPy 数组。
第二组括号调用 NumPy 数组并导致错误。
要解决该错误,请删除第二组括号。
import numpy as np def get_array(): return np.array([1, 2, 3, 4]) print(get_array()) # 👉️ [1 2 3 4]
现在我们只调用一次函数,它返回一个 NumPy 数组。
具有同名的类方法和类属性
如果您正在使用类,请确保您没有同名的方法和类属性。
这导致错误的方式与具有同名函数和变量的方式相同。
您必须重命名类方法或属性,以免它们发生冲突。
要解决错误,请确保:
- 您不是在尝试使用括号
()
而不是方括号访问 NumPy 数组[]
。 - 您没有同名的函数和变量。
- 您没有覆盖内置函数并将其设置为 NumPy 数组。
- 您没有同名的类方法和属性。
- 您没有调用一个返回 NumPy 数组两次的函数。
TypeError: ‘Series’ 对象在 Python 中不可调用
Python“TypeError: ‘Series’ object is not callable”发生在我们尝试调用一个Series
对象时,就好像它是一个函数一样。
要解决该错误,请解决函数名和变量名之间的任何冲突,并且不要覆盖内置函数。
这是一个非常简单的示例,说明错误是如何发生的。
import pandas as pd d = {'a': 1, 'b': 2, 'c': 3} ser = pd.Series(data=d, index=['a', 'b', 'c']) # ⛔️ TypeError: 'Series' object is not callable print(ser())
我们正在尝试调用
pandas Series
对象,就好像它是一个函数一样。
去掉括号解决错误
如果您错误地添加了括号,只需删除它们即可解决错误。
import pandas as pd d = {'a': 1, 'b': 2, 'c': 3} ser = pd.Series(data=d, index=['a', 'b', 'c']) # a 1 # b 2 # c 3 # dtype: int64 print(ser)
我们删除了括号,我们不再尝试将Series
对象作为函数调用,因此问题已解决。
常见错误原因
出现错误的原因有多种:
- 试图调用
Series
带括号的对象()
。 - 具有同名的函数和变量。
- 错误地覆盖内置函数并将其设置为
Series
对象。 - 具有同名的类方法和类属性。
- 调用一个返回一个
Series
对象两次的函数。
拥有一个隐藏内置函数的函数或变量
错误的另一个常见原因是函数和变量名称之间存在冲突或覆盖内置函数。
import pandas as pd d = {'a': 1, 'b': 2, 'c': 3} ser = pd.Series(data=d, index=['a', 'b', 'c']) # 👇️ this overrides the built-in list() function list = ser # ⛔️ TypeError: 'Series' object is not callable print(list(['a', 'b', 'c']))
我们声明了一个变量 namedlist
并将其设置为一个Series
对象。
list()
函数,所以当我们尝试list()
在最后一行调用构造函数时,我们实际上是在调用 `Series` 对象。要解决该错误,请重命名变量并且不要覆盖任何内置方法。
import pandas as pd d = {'a': 1, 'b': 2, 'c': 3} ser = pd.Series(data=d, index=['a', 'b', 'c']) # ✅ renamed variable my_list = ser print(list(['a', 'b', 'c']))
该变量现在有了不同的名称,并且不再影响内置函数。
有一个同名的变量和函数
如果函数和变量同名,也会出现此错误。
import pandas as pd d = {'a': 1, 'b': 2, 'c': 3} def series(): return 'bobbyhadz.com' series = pd.Series(data=d, index=['a', 'b', 'c']) # ⛔️ TypeError: 'Series' object is not callable series()
我们series
在定义了同名函数后定义了一个变量。
当我们尝试用series
括号调用函数时,我们实际上是在调用Series
对象,因为变量在函数之后。
要解决该错误,请重命名您的函数或变量。
import pandas as pd d = {'a': 1, 'b': 2, 'c': 3} def my_func(): return 'bobbyhadz.com' series = pd.Series(data=d, index=['a', 'b', 'c']) print(my_func()) # 👉️ bobbyhadz.com
现在函数和变量不再同名,所以问题解决了。
使用类时
如果您正在使用类,请确保您没有同名的方法和类属性。
这导致错误的方式与具有同名函数和变量的方式相同。
您必须重命名类方法或属性,以免它们发生冲突。
调用一个返回一个Series对象两次的函数
这是错误如何发生的另一个示例。
import pandas as pd def get_series(): d = {'a': 1, 'b': 2, 'c': 3} ser = pd.Series(data=d, index=['a', 'b', 'c']) return ser # ⛔️ TypeError: 'Series' object is not callable get_series()()
请注意,我们在调用该函数时使用了两组括号。
第一组调用函数,函数返回一个Series
对象。
第二组括号调用Series
对象并导致错误。
要解决该错误,请删除第二组括号。
import pandas as pd def get_series(): d = {'a': 1, 'b': 2, 'c': 3} ser = pd.Series(data=d, index=['a', 'b', 'c']) return ser # a 1 # b 2 # c 3 # dtype: int64 print(get_series())
开始调试的一个好方法是print(dir(your_object))
查看Series
对象具有哪些属性。
import pandas as pd d = {'a': 1, 'b': 2, 'c': 3} ser = pd.Series(data=d, index=['a', 'b', 'c']) print(dir(ser))
如果将一个类传递给dir()
函数,它会返回该类属性的名称列表,并递归地返回其基类的属性。
Series
作为函数调用。Series
您可以在
pandas 官方文档中查看对象的属性和方法。
结论
要解决错误,请确保:
- 您不是要用括号调用
Series
对象。 - 您没有同名的函数和变量。
- 您没有覆盖内置函数并将其设置为
Series
对象。 - 您没有同名的类方法和属性。
- 您不是在调用一个
Series
两次返回对象的函数。
额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: