首页 > 解决方案 > 解压不可迭代的 NoneType 对象

问题描述

这是我的代码:

signal = np.load('signal_glitches.npy')
#print(signal[:, 0])
fig,ax = plt.subplots(figsize = (10,5))
print(type(signal))
def t0_t(arr, n):
    arr = list(arr)
    for i in range (n):
        if arr[i] <= np.mean(arr):
            t = int(arr.index(max(arr)))
            #print(t)
            delta_t = abs(arr.index(max(arr)) - i - 1)
            return (delta_t, t)
        break
for i in range (len(signal[:, 0])):
    ax.plot(signal[i,:], '--') 

print(len(signal[235, :]))
def exp_model(time, a, tau_0, tau_1, c):
    S = a * (1 - np.exp((time)/tau_0)) * np.exp((time)/tau_1) + c
for i in range (len(signal[:, 0])):
    arr = signal[i,:]
    n = len(signal[i,:])
    time, t = t0_t(arr, n)
    if time == None:
        time = 199
    #print(time)
ax.set_title(label = 'run7det88' + ',' + str(len(signal[:,0])) + 'glitches', y = 1.02, fontsize = 18)
plt.xlabel('ADC', fontsize = 30)
plt.ylabel('I(nA)', fontsize = 30)
plt.tight_layout()
plt.tick_params(axis = 'x', labelsize = 18, which = 'major', pad = 18)
plt.tick_params(axis = 'y', labelsize = 18, which = 'major', pad = 18)
plt.tick_params(which = 'both', width = 3)
plt.tick_params(which = 'major', length = 8)
plt.tick_params(which = 'minor', length = 4)
#axes = fig.add_subplot(111)

蟒蛇注意到:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-154-e3826bc92d95> in <module>
     21     arr = signal[i,:]
     22     n = len(signal[i,:])
---> 23     (time, t) = t0_t(arr, n)
     24     if time == None:
     25         time = 199

TypeError: cannot unpack non-iterable NoneType object

我试图打印出 delta_t 和 t,它们都返回值,我不知道如何修复它而且我还返回整数值:199 和 200,它仍然注意到相同

标签: pythonfunctionreturn

解决方案


在 python 中,如果函数结束时没有显式返回值,则默认返回值为None.

例如,这段代码:

def func():
    num = 7
print(func())

将输出None,因为func没有返回任何值。

在您的代码中,t0_t正在返回None,然后您尝试将其解包

(time, t) = t0_t(arr, n)

您无法解压缩 Nonetype,因此会出现错误。

尝试将函数重写为

def t0_t(arr, n):
    arr = list(arr)
    for i in range (n):
        if arr[i] <= np.mean(arr):
            t = int(arr.index(max(arr)))
            #print(t)
            delta_t = abs(arr.index(max(arr)) - i - 1)
            return (delta_t, t)
        break

    return (None, None)

这确保了该函数将始终返回一个可以解包的 2 元组。


推荐阅读