面向对象:“NoneType”对象不可迭代。为啥?
Posted
技术标签:
【中文标题】面向对象:“NoneType”对象不可迭代。为啥?【英文标题】:Object Oriented: 'NoneType' object is not iterable. Why?面向对象:“NoneType”对象不可迭代。为什么? 【发布时间】:2018-05-18 08:44:24 【问题描述】:这是一个反复出现的话题,关于不可迭代的函数,因为python3 TypeError: 'function' object is not iterable
我不知道什么时候执行代码,它说
w,c= PRank.Prank(c,w,X[i,:],Y[i])
TypeError: 'NoneType' object is not iterable: 这是代码。
import numpy as np
class PRank:
def predict(X,w,c):
rank = min(np.where(np.dot(X,w)-c<0)[0])
return(rank)
def Prank (c,w,x_t,y):
l_t=np.zeros(len(c)-1)
a_t=np.zeros(len(c)-1)
y_t =min(np.where((np.dot(w,x_t)-c) < 0)[0])
if y_t != y:
for r in range(len(c)-1):
if (y <= r):
l_t[r] = -1
else:
l_t[r] = 1
for r in range(len(c)-1):
if (((np.dot(w,x_t)-c[r])*l_t[r]) <= 0):
a_t[r] = l_t[r]
else:
a_t[r] = 0
w = w + sum(a_t)*x_t
c_ = np.delete(c,len(c)-1)
c_ = c_ - a_t
c = np.append(c_,np.inf)
else:
w = w
c = c
def modelPRank(X,Y,maxrank=5,epsilon=0.02):
N=np.shape(X)[0]
feat=np.shape(X)[1]
c=np.sort(np.random.uniform(size=(maxrank+1,1)),axis=0)
c[0]=-np.inf
c[-1]=np.inf
w=np.zeros(feat)
ypred=np.zeros(N)
MSE=1
j=0
while MSE > epsilon:
for i in range(np.shape(X)[0]):
w,c= PRank.Prank(c,w,X[i,:],Y[i])
for i in range(np.shape(X)[0]):
ypred[i]=min(np.where(np. dot(X[i,:],w)-c<0)[0])
MSE=np.nanmean((ypred-Y)**2)
print(MSE)
j=j+1
return[MSE,w,ypred,c]
X=np.random.uniform(1,5,(5000,2))
Wini=[0.35,0.65]
Y=np.round(np.dot(X,Wini))
PRank.modelPRank(X,Y)
如果我不使用类,那么代码运行良好。我不知道为什么它说 Prank 不可迭代,我该如何解决。
【问题讨论】:
您是否尝试过退货? 您能推荐一下吗? 错误是否没有提供指示失败位置的行? 在我称之为 Prank 的 modelPRank 函数中是的。 您的.Prank(...)
调用返回None
(默认返回值)。您不能将 None
分配给两个目标名称。
【参考方案1】:
您是在告诉 Python 将 .Prank(...)
调用的返回值解压缩为两个变量,w
和 c
:
w,c= PRank.Prank(c,w,X[i,:],Y[i])
为了让 Python 做到这一点,右侧生成的任何内容都必须是可迭代的(如列表、元组或字符串),然后使用该可迭代的每个元素为您的两个名称分配值.
您的函数调用返回None
,它不是可迭代的;它不能用于为两个不同的名称分配单独的值。
在函数末尾添加return语句,返回一个元组中的两个值:
return w, c
这与使用类无关。例如,您没有正确使用您的课程,您没有创建实例。你所做的只是将一个函数移动到一个类对象中。
【讨论】:
谢谢..我没看到...最后一个愚蠢的问题,休息后可以避免..以上是关于面向对象:“NoneType”对象不可迭代。为啥?的主要内容,如果未能解决你的问题,请参考以下文章
TypeError: 'NoneType' 对象不可迭代,使用带有 Selenium/Appium 的页面对象框架
运行测试时突然出现“TypeError:'NoneType'对象不可迭代
TypeError:“NoneType”对象在 Python 中不可迭代