首页 > 解决方案 > 获得“无”的输出,但不确定究竟是什么触发了它

问题描述

我有一个绘制两个直方图的函数,以及一个从家庭作业问题中给我的表格中计算一些统计数据的方法。当我在我的 jupyter notebook 中运行这个函数时,我得到以下输出:

None                #Not quite sure where this came from
(26.54, 4269775.77) #This is calculated correctly

<histogram 1> #This is rendered correctly
<histogram 2> #This is also rendered correctly

而我的预期输出应该只是

(26.54, 4269775.77)

<histogram 1>
<histogram 2>

我尝试注释掉不同的行以查看是否可以隔离问题,但无济于事。下面是我正在运行的代码,它对应于上面的输出

def compute_statistics(age_and_salary_data):
    t = full_data
    age = t.column('Age')
    salary = t.column('Salary')
    age_and_salary_data = Table().with_columns('Age', age, 'Salary', salary)
    print(age_and_salary_data.hist('Age', bins = (np.arange(18,np.max(age)+1,1))))
    average_age = np.mean(age)
    average_salary = np.mean(salary)
    average_list = (np.round(average_age, 2), np.round(average_salary,2))
    return age_and_salary_data.hist('Salary', bins = np.arange(0,np.max(salary)+1, 1000000))
average_age = np.mean(full_data.column('Age'))
average_salary = np.mean(salary_data.column('Salary'))
average_list = (np.round(average_age, 2), np.round(average_salary, 2))
compute_statistics(full_data)
print(average_list)

当我通过评分器运行此程序时,我遇到了以下关于为什么我得到错误答案的答案。

>>> round(float(compute_statistics(full_data)[0]), 2) == 26.54
None
TypeError: 'NoneType' object is not subscriptable

# Error: expected
#     True
# but got
#     Traceback (most recent call last):
#       ...
#     TypeError: 'NoneType' object is not subscriptable

标签: pythonfunctionnumpy

解决方案


一直在玩这个函数,并且能够通过删除print函数中的语句compute_statistics并将直方图渲染为返回,就像其他直方图一样,能够摆脱讨厌的 None 。以供参考:

def compute_statistics(age_and_salary_data):
    age = full_data.column('Age')
    salary = salary_data.column('Salary')
    age_and_salary_data = Table().with_columns('Age', age, 'Salary', salary)
    average_age = np.mean(age)
    average_salary = np.mean(salary)
    average_list = (np.round(average_age, 2), np.round(average_salary,2))
    return age_and_salary_data.hist('Salary', bins = np.arange(min(salary),max(salary)+1, 1000000)), age_and_salary_data.hist('Age', bins = (np.arange(min(age),max(age)+1,1)))
average_age = np.mean(full_data.column('Age'))
average_salary = np.mean(salary_data.column('Salary'))
average_list = (np.round(average_age, 2), np.round(average_salary, 2))
compute_statistics(full_data)
print(average_list)

虽然这已经解决了我的问题并且我想可以被认为是一个答案,但我仍然不确定为什么做我所做的工作而不是使用打印声明,并且任何见解都将不胜感激


推荐阅读