Skip to main content
 首页 » 编程设计

Python:无法摆脱 TypeError:+ 不支持的操作数类型: 'NoneType' 和 'NoneType'

2025年05月04日10jillzhang

输入

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

输出应该是:

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

Code:

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' 

我该如何解决这个问题?

请您参考如下方法:

您的函数返回 None(一个空的 return 语句)。而是返回一个空字符串:

if los == []: 
    return '' 

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

接下来,print_row() 也返回 None,因为您没有从它返回任何。简单地丢弃它的返回值:

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

请注意,您永远不会使用 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)