Python:无法删除TypeError:不支持+:“NoneType”和“NoneType”

2024-09-28 17:31:14 发布

您现在位置:Python中文网/ 问答频道 /正文

输入

[['1','2','3'],['a','b','c'],['6','7','8'],['e','f','g']]

输出应为:

^{pr2}$

代码:

def print_row(los):
    print ', '.join(los)


def print_table(los):
    lose = []
    if los  == []:
        return
    else:
        return print_row(los[0]) + print_table(los[1:]) 

目前:

print_table([['1','2','3'],['a','b','c'],['6','7','8'],['e','f','g']])

给出:

1, 2, 3
a, b, c
6, 7, 8
e, f, g

TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType'

我怎么解决这个问题?在


Tags: 代码returnifdeftableelserowprint
2条回答

另一个答案解释了为什么你所拥有的不起作用,但这里有一个更简单的方法:

l = [['1','2','3'],['a','b','c'],['6','7','8'],['e','f','g']]

print '\n'.join(', '.join(j) for j in l)
^{pr2}$

相关文件

函数返回None(空的return语句)。返回空字符串:

if los == []:
    return ''

您还有一个从未使用过的lose定义,您可以使用not los测试空列表。最后但并非最不重要的是,由于return提前退出函数,else:语句是可选的。在

接下来,print_row()也将返回None,因为您不会从中返回任何内容。只需丢弃它的返回值:

^{pr2}$

请注意,您永远不会使用print_table的返回值,因此您最好不要返回任何内容;只需测试是否有任何打印:

def print_table(los):
    if los:
        print_row(los[0])
        print_table(los[1:]) 

现在您只需内联print_row函数(它只是一行代码):

def print_table(los):
    if los:
        print ', '.join(los[0])
        print_table(los[1:]) 

这仍然是递归的;Python在递归方面不是很强,但它可以很好地执行循环:

def print_table(los):
    for sublist in los:
        print ', '.join(sublist)

也可以简化为换行符上的连接:

def print_table(los):
    print '\n'.join(', '.join(sublist) for sublist in los)

相关问题 更多 >