Python 为什么我的代码会产生TypeError:';非类型';对象是不可编辑的

Python 为什么我的代码会产生TypeError:';非类型';对象是不可编辑的,python,python-3.x,Python,Python 3.x,我知道这个错误已经被问过好几次了,但是我一直在用我的代码解释为什么它总是返回TypeError def merge( s1, s2): if len(s1) == 0: return s2[:] if len(s2) == 0: return s1[:] minElm = [] if s1[0] <= s2[0]: minElm.append( s1.pop(0) ) else: min

我知道这个错误已经被问过好几次了,但是我一直在用我的代码解释为什么它总是返回TypeError

def merge( s1, s2):
    if len(s1) == 0:
        return s2[:]
    if len(s2) == 0:
        return s1[:]
    minElm = []
    if s1[0] <= s2[0]:
        minElm.append( s1.pop(0) )
    else:
        minElm.append( s2.pop(0) )
    return minElm.extend( merge(s1[:], s2[:] ))

list1 = [1,3,5,7,9]
list2 = [2,4,6,8]

merged = merge( list1[:], list2[:] )
print(merged)
def合并(s1、s2):
如果len(s1)==0:
返回s2[:]
如果len(s2)==0:
返回s1[:]
minElm=[]

如果s1[0]在这里返回
None
(因为
.extend
已就位):

return minElm.extend(merge(s1[:],s2[:])
不返回任何值,特别是因为
list.extend
方法不返回任何值。相反,请执行以下操作之一:

minElm.extend( merge(s1[:], s2[:] ))
return minElm


这是正确的答案。乔恩也有正确答案,但他落后30秒,所以我想我会选择你的答案。但我也会支持乔恩的回答。@Chilpol我实际上领先22秒;)。。。但这是一个更完整的答案,指出了如何纠正它;)是的,在我写代码的时候,我注意到有人回答了我的问题,然后说:“去他妈的,我写了这么多,反正我会发布的。”。“第一个答案的争夺真的很烦人。@DevinJeanpierre:别担心第一个答案的争夺。”。只要写一个好的答案(就像这个),不管需要多长时间。如果你找到另一个答案,说明你所做的一切,你可以随时删除它。如果你的答案有其他人没有的有用信息,那么它是有用的。还有什么重要的吗?@abarnert:你以后可以随时编辑高质量的内容,不是吗?自从我开始注意到这种趋势以来,我一直试图避免陷入这种情况,但事实并非如此。一般来说,当你遇到不理解的问题时,打印中间值或通过调试器或,而不是三步之后,最终导致错误。
minElm.extend( merge(s1[:], s2[:] ))
return minElm
return minElm + merge(s1[:], s2[:] )