如何解决Python:打印的对象有类型但返回的对象是 NoneType?
我有一个函数,它返回一个包含 NumPy 数组和列表的元组。在函数结束时,我打印出数组和列表,看起来都正确。然后我打印它们的类型,这些看起来也正确。但是当我返回它们时,我收到一个 NoneType 错误。我很困惑为什么会这样。代码如下。 adjust_param
是一个辅助函数。 TypeError 在 optimize_theta
的返回行中被断言。
def adjust_param(R,delta,i,theta):
thetaplus = theta.copy()
thetaminus = theta.copy()
thetaplus[i*2] += delta
thetaplus[i*2+1] += delta
thetaminus[i*2] -= delta
thetaminus[i*2+1] -= delta
y = Remp(q_data,labels,R,num_samples,theta)
yplus = Remp(q_data,thetaplus)
yminus = Remp(q_data,thetaminus)
if (yplus < y and yplus < yminus and yplus != -1):
return thetaplus,yplus
elif (yminus < y and yminus < yplus and yminus != -1):
return thetaminus,yminus
else:
return theta,y
def optimize_theta(N,theta,risk):
if N == 0:
print("Theta : " + str(type(theta)))
print("= " + str(theta))
print()
print("Risk : " + str(type(risk)))
print("= " + str(risk))
return theta,risk
else:
theta_new,risk_new = adjust_param(R,theta)
if i == (len(theta)/2)-1:
#print("N = " + str(N-1))
#print("theta = " + str(theta))
risk_copy = risk.copy()
risk_copy.append(risk_new)
optimize_theta(N-1,theta_new,risk_copy)
else:
optimize_theta(N,i+1,risk)
输出:
Theta : <class 'numpy.ndarray'>
= [0.85885111 0.86066499 0.47482528 0.13555158 0.87249245 0.02604654
0.2906744 0.34618303]
Risk : <class 'list'>
= [0.6273510217403618]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-307-8b43b528fee2> in <module>
----> 1 theta,risk = optimize_theta(N,theta0,[])
TypeError: cannot unpack non-iterable NoneType object
任何见解将不胜感激。谢谢!
解决方法
您必须在 optimize_theta 的 else
部分中明确返回结果。
def optimize_theta(N,R,delta,i,theta,risk):
if N == 0:
print("Theta : " + str(type(theta)))
print("= " + str(theta))
print()
print("Risk : " + str(type(risk)))
print("= " + str(risk))
return theta,risk
else:
theta_new,risk_new = adjust_param(R,theta)
if i == (len(theta)/2)-1:
#print("N = " + str(N-1))
#print("theta = " + str(theta))
risk_copy = risk.copy()
risk_copy.append(risk_new)
return optimize_theta(N-1,theta_new,risk_copy)
else:
return optimize_theta(N,i+1,risk)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。