类型错误:无法解压不可迭代的 int objec

问题描述 投票:0回答:5

运行我的代码后,如何解决此错误,如下所示。我正在使用下面的函数并在其上实现运行窗口 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

如何解决此错误?

python pandas numpy scipy python-xarray
5个回答
13
投票

只需将

return 0
替换为
return 0, 0
,或者更好:引发错误而不是返回 0

当你的

if
条件为True时,你只返回
0
。然后,当你执行
agg, gps = get_grps(...)
时,你告诉 python 解压函数的结果。然后,python 期待一个 2 长度的可迭代对象,并尝试解压它,但正如它所说:它“无法解压不可迭代的 int 对象”...

因此,一个快速的解决方法是返回一个带有

return 0, 0
的元组 (0, 0),但这很糟糕,因为你在需要对象的地方返回整数。您的脚本将在下一行崩溃
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'])

5
投票

出现了类似的错误,因此为了解决此问题,我发布了一个例如。希望它会有所帮助。

原因:由于

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)

1
投票

(姜戈) 就我而言,我尝试获取一个项目而不设置搜索参数:

 schooling = Schooling.objects.get(randint(1, 10)) #Error


 schooling = Schooling.objects.get(id=randint(1, 10)) #OK set id=

1
投票

我在 Django 中遇到了同样的错误:

类型错误:无法解压不可迭代的 int 对象

使用 get(20)filter(20) 检索 id 时,如下所示:

                      # Here
obj = Person.objects.get(20)
                        # Here
qs = Person.objects.filter(20)

于是,我用get(id=20)

filter(id=20)
检索了
id
,如下所示,然后错误就解决了:

                       # Here
obj = Person.objects.get(id=20)
                         # Here
qs = Person.objects.filter(id=20)

0
投票

在我的 Django 项目中运行测试时,我遇到了类似的错误。

TypeError: cannot unpack non-iterable int object

我在views.py 文件中创建deleteCourse 函数时发现了一个拼写错误。错误在于使用连字符而不是等号。

def deleteCourse(rqeuest,id):
    course = Course.objects.get(id-id)
    course.delete()
    return redirect('/')


def deleteCourse(rqeuest,id):
    course = Course.objects.get(id=id)
    course.delete()
    return redirect('/')

注重细节是编码的关键。花时间彻底检查您的代码,确保准确性和正确性。这是针对意外错误的最佳防御,并确保您的代码顺利运行。

© www.soinside.com 2019 - 2024. All rights reserved.