Python“TypeError: 'NoneType' object is not iterable"原因

今天下午为了做概率题,写了几个小程序,结果调用函数时总是报TypeError: 'NoneType' object is not iterable,经过了研究,终于发现了原因,跟大家分享一下。
我的代码(一部分,错误的):
#probability.py
def LEN(seq):
    b = 0
    for a in seq:
        b += 1
    return b   
def middle_number(seq):
    """This function can find the middle number of an unordered or an ordered seq."""
    a = LEN(seq)
    if a%2 == 0:
        if a == 0:
            print"Don't use an empty sequence."
        else:
            c = a//2
            return seq[c] ,seq[c-1]
    else:
        d = a//2
        return seq[d]
def insertionsort(seq):
    """Algorithms--InsertionSort"""
    for i in range(1,LEN(seq)):    ##Create seq A1(unordered),A2(ordered)
        key = seq[i]      ##The elements of A1
        j = i-1             ##The elements of A2
        while  j>=0 and seq[j] > key:  ##In a way,this loop is similar to if/else
            seq[j+1] = seq[j]
            j = j-1
        seq[j+1] = key
def median(seq):
    """This function can find the median."""
    z = insertionsort(seq)
    return middle_number(z)
运行程序,就会报错,原因其实很简单:带把一个表达式或NONE作为参数提供给函数时,就会引发TYPEERROR,因为这是不可迭代的。
我修改后的正确代码:
#probability.py
def LEN(seq):
    b = 0
    for a in seq:
        b += 1
    return b   
def middle_number(seq):
    """This function can find the middle number of an unordered or an ordered seq."""
    a = LEN(seq)
    if a%2 == 0:
        if a == 0:
            print"Don't use an empty sequence."
        else:
            c = a//2
            return seq[c] ,seq[c-1]
    else:
        d = a//2
        return seq[d]
def insertionsort(seq):
    """Algorithms--InsertionSort"""
    for i in range(1,LEN(seq)):    ##Create seq A1(unordered),A2(ordered)
        key = seq[i]      ##The elements of A1
        j = i-1             ##The elements of A2
        while  j>=0 and seq[j] > key:  ##In a way,this loop is similar to if/else
            seq[j+1] = seq[j]
            j = j-1
        seq[j+1] = key
    return seq
def median(seq):
    """This function can find the median."""
    z = insertionsort(seq)
    return middle_number(z)
原来的插入排序语句没有return语句,所以将结果赋值给变量,将得到NONE.

posted @ 2015-03-25 10:47  Q_Quan  阅读(2963)  评论(0编辑  收藏  举报