TypeError: cannot unpack non-iterable int objec
TypeError: cannot unpack non-iterable int objec
如何解决此错误 运行 我的代码如下。我正在使用下面的函数并在其上实现 运行 window for 循环,但最终出现以下错误。 for 循环工作并挂在一个点上。
def get_grps(s, thresh=-1, Nmin=3):
"""
Nmin : int > 0
Min number of consecutive values below threshold.
"""
m = np.logical_and.reduce([s.shift(-i).le(thresh) for i in range(Nmin)])
if Nmin > 1:
m = pd.Series(m, index=s.index).replace({False: np.NaN}).ffill(limit=Nmin - 1).fillna(False)
else:
m = pd.Series(m, index=s.index)
# Form consecutive groups
gps = m.ne(m.shift(1)).cumsum().where(m)
# Return None if no groups, else the aggregations
if gps.isnull().all():
return 0
else:
agg = s.groupby(gps).agg([list, sum, 'size']).reset_index(drop=True)
# agg2 = s2.groupby(gps).agg([list, sum, 'size']).reset_index(drop=True)
return agg, gps
data_spi = [-0.32361498 -0.5229471 0.15702732 0.28753752 -0.01069884 -0.8163699
-1.3169327 0.4413181 0.75815576 1.3858147 0.49990863-0.06357133
-0.78432 -0.95337325 -1.663739 0.18965477 0.81183237 0.8360347
0.99537593 -0.12197364 -0.31432647 -2.0865853 0.2084263 0.13332903
-0.05270813 -1.0090573 -1.6578217 -1.2969246 -0.70916456 0.70059913
-1.2127264 -0.659762 -1.1612778 -2.1216285 -0.8054617 -0.6293912
-2.2103117 -1.9373081 -2.530625 -2.4089663 -1.950846 -1.6129876]
lon = data_spi.lon
lat = data_spi.lat
print(len(data_spi))
n=6
for x in range(len(lat)):
for y in range(len(lon)):
if data_spi[0, x, y] != 0:
for i in range(len(data_spi)-70):
ts = data_spi[i:i+10, x, y].fillna(1)
print(ts)
# print(np.array(ts))
agg, gps = get_grps(pd.Series(ts), thresh=-1, Nmin=3)
duration = np.nanmean(agg['sum'])
frequency = len(agg['sum'])
severity = np.abs(np.mean(agg['sum']))
intensity = np.mean(np.abs(agg['sum'] / agg['size']))
print(f'intensity {intensity}')
我收到这个错误
Traceback (most recent call last):
File "/Users/mada0007/PycharmProjects/Research_ass /FREQ_MEAN_INT_DUR_CORR.py", line 80, in <module>
agg, gps = get_grps(pd.Series(ts), thresh=-1, Nmin=3)
typeError: cannot unpack non-iterable int object
我该如何解决这个错误?
只需将 return 0
替换为 return 0, 0
,或者更好:引发错误而不是 returning 0
当你的if
条件为真时,你只有return0
。然后稍后,当您执行 agg, gps = get_grps(...)
时,您告诉 python 解包函数的结果。然后,python 期待一个 2 长度的迭代,并尝试解压它,但正如它所说:它 'cannot unpack non-iterable int object'...
所以一个快速的解决方法是 return 元组 (0, 0) 和 return 0, 0
,但这很糟糕,因为你 return 预期对象的整数。您的脚本将在下一行 duration = np.nanmean(agg['sum'])
崩溃(因为 agg
为 0)。
处理这种情况的一些更简洁的解决方案是第二次解压:
def get_grps(s, thresh=-1, Nmin=3):
# ...
if gps.isnull().all():
return None
else:
# ...
return agg, gps
for i in range(len(data_spi)-70):
ts = data_spi[i:i+10, x, y].fillna(1)
result = get_grps(pd.Series(ts), thresh=-1, Nmin=3)
if result is None:
break
agg, gps = result
duration = np.nanmean(agg['sum'])
frequency = len(agg['sum'])
出现了类似的错误,为了解决这个问题,我发布了一个例子。希望能帮到你。
原因:由于 int
内部没有 __itr__
方法,我们不能像在 list
或 tuple
或 dict{}
.
x,y,z,n = input() # NOT CONVERTING THE INPUT TO 'INT' HERE
l = []
for a in range(0,int(x)): # converting the input to INT
for b in range(0,int(y)): # converting the input to INT
for c in range(0,int(z)): # converting the input to INT
if a+b+c!= n:
l.append([a,b,c])
print(l)
(DJANGO)
在我的例子中,我试图在没有设置搜索参数的情况下获取一个项目:
schooling = Schooling.objects.get(randint(1, 10)) #Error
schooling = Schooling.objects.get(id=randint(1, 10)) #OK set id=
如何解决此错误 运行 我的代码如下。我正在使用下面的函数并在其上实现 运行 window for 循环,但最终出现以下错误。 for 循环工作并挂在一个点上。
def get_grps(s, thresh=-1, Nmin=3):
"""
Nmin : int > 0
Min number of consecutive values below threshold.
"""
m = np.logical_and.reduce([s.shift(-i).le(thresh) for i in range(Nmin)])
if Nmin > 1:
m = pd.Series(m, index=s.index).replace({False: np.NaN}).ffill(limit=Nmin - 1).fillna(False)
else:
m = pd.Series(m, index=s.index)
# Form consecutive groups
gps = m.ne(m.shift(1)).cumsum().where(m)
# Return None if no groups, else the aggregations
if gps.isnull().all():
return 0
else:
agg = s.groupby(gps).agg([list, sum, 'size']).reset_index(drop=True)
# agg2 = s2.groupby(gps).agg([list, sum, 'size']).reset_index(drop=True)
return agg, gps
data_spi = [-0.32361498 -0.5229471 0.15702732 0.28753752 -0.01069884 -0.8163699
-1.3169327 0.4413181 0.75815576 1.3858147 0.49990863-0.06357133
-0.78432 -0.95337325 -1.663739 0.18965477 0.81183237 0.8360347
0.99537593 -0.12197364 -0.31432647 -2.0865853 0.2084263 0.13332903
-0.05270813 -1.0090573 -1.6578217 -1.2969246 -0.70916456 0.70059913
-1.2127264 -0.659762 -1.1612778 -2.1216285 -0.8054617 -0.6293912
-2.2103117 -1.9373081 -2.530625 -2.4089663 -1.950846 -1.6129876]
lon = data_spi.lon
lat = data_spi.lat
print(len(data_spi))
n=6
for x in range(len(lat)):
for y in range(len(lon)):
if data_spi[0, x, y] != 0:
for i in range(len(data_spi)-70):
ts = data_spi[i:i+10, x, y].fillna(1)
print(ts)
# print(np.array(ts))
agg, gps = get_grps(pd.Series(ts), thresh=-1, Nmin=3)
duration = np.nanmean(agg['sum'])
frequency = len(agg['sum'])
severity = np.abs(np.mean(agg['sum']))
intensity = np.mean(np.abs(agg['sum'] / agg['size']))
print(f'intensity {intensity}')
我收到这个错误
Traceback (most recent call last):
File "/Users/mada0007/PycharmProjects/Research_ass /FREQ_MEAN_INT_DUR_CORR.py", line 80, in <module>
agg, gps = get_grps(pd.Series(ts), thresh=-1, Nmin=3)
typeError: cannot unpack non-iterable int object
我该如何解决这个错误?
只需将 return 0
替换为 return 0, 0
,或者更好:引发错误而不是 returning 0
当你的if
条件为真时,你只有return0
。然后稍后,当您执行 agg, gps = get_grps(...)
时,您告诉 python 解包函数的结果。然后,python 期待一个 2 长度的迭代,并尝试解压它,但正如它所说:它 'cannot unpack non-iterable int object'...
所以一个快速的解决方法是 return 元组 (0, 0) 和 return 0, 0
,但这很糟糕,因为你 return 预期对象的整数。您的脚本将在下一行 duration = np.nanmean(agg['sum'])
崩溃(因为 agg
为 0)。
处理这种情况的一些更简洁的解决方案是第二次解压:
def get_grps(s, thresh=-1, Nmin=3):
# ...
if gps.isnull().all():
return None
else:
# ...
return agg, gps
for i in range(len(data_spi)-70):
ts = data_spi[i:i+10, x, y].fillna(1)
result = get_grps(pd.Series(ts), thresh=-1, Nmin=3)
if result is None:
break
agg, gps = result
duration = np.nanmean(agg['sum'])
frequency = len(agg['sum'])
出现了类似的错误,为了解决这个问题,我发布了一个例子。希望能帮到你。
原因:由于 int
内部没有 __itr__
方法,我们不能像在 list
或 tuple
或 dict{}
.
x,y,z,n = input() # NOT CONVERTING THE INPUT TO 'INT' HERE
l = []
for a in range(0,int(x)): # converting the input to INT
for b in range(0,int(y)): # converting the input to INT
for c in range(0,int(z)): # converting the input to INT
if a+b+c!= n:
l.append([a,b,c])
print(l)
(DJANGO) 在我的例子中,我试图在没有设置搜索参数的情况下获取一个项目:
schooling = Schooling.objects.get(randint(1, 10)) #Error
schooling = Schooling.objects.get(id=randint(1, 10)) #OK set id=