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.