运行Numpy代码出现AttributeError: 'builtin_function_or_method'无tolist属性报错
问题排查
报错直接原因
错误出现在全局均值计算的代码行:
(new_array.mean.tolist())
Numpy数组的mean是需要调用的内置方法,你此处没有添加调用括号(),相当于直接对方法对象本身调用tolist(),因此触发了builtin_function_or_method 没有 tolist 属性的报错。其余统计项的全局计算都正确添加了调用括号,仅mean的全局计算漏写。
其他隐含bug
你当前代码还存在两个逻辑错误:
- 长度校验的
try...except写法不符合Python语法,except后只能接异常类型,不能直接写判断条件,当前的长度校验完全不生效,传入不足9个元素的列表时会在reshape步骤直接报错 - 结果字典
calculations定义在全局作用域,多次调用函数时会复用之前的结果,导致返回值异常
修复后的完整代码
import numpy as np def calculate(input_list): # 先做长度校验 if len(input_list) != 9: raise ValueError("List must contain nine numbers") # 转换数组并reshape new_array = np.array(input_list).reshape(3, 3) # 函数内部初始化结果字典 calculations = {} calculations['mean'] = [ new_array.mean(axis=0).tolist(), new_array.mean(axis=1).tolist(), new_array.mean().tolist() # 补全调用括号 ] calculations['variance'] = [ new_array.var(axis=0).tolist(), new_array.var(axis=1).tolist(), new_array.var().tolist() ] calculations['standard deviation'] = [ new_array.std(axis=0).tolist(), new_array.std(axis=1).tolist(), new_array.std().tolist() ] calculations['max'] = [ new_array.max(axis=0).tolist(), new_array.max(axis=1).tolist(), new_array.max().tolist() ] calculations['min'] = [ new_array.min(axis=0).tolist(), new_array.min(axis=1).tolist(), new_array.min().tolist() ] calculations['sum'] = [ new_array.sum(axis=0).tolist(), new_array.sum(axis=1).tolist(), new_array.sum().tolist() ] return calculations
内容的提问来源于stack exchange,提问作者David Daniel
相关产品推荐
相关产品推荐

