为何将if else代码改写为单行表达式会触发报错?
解决单行if-else表达式引发的TypeError类型错误
你遇到的问题根源很明确:list.append()方法的返回值是None,而你在单行表达式里错误地把这个None当成了整数和j做加法运算。
对比你的两段代码:
- 多行版本里,
if分支执行j +=1,else分支只是调用monkeys[j].append(line)——这两个是独立的执行语句,else分支的操作不会影响j的值。 - 单行版本的
j += 1 if line == [''] else monkeys[j].append(line),本质是把整个条件表达式的结果赋值给j +=的右操作数。当条件不满足时,条件表达式返回的是append()的结果None,相当于执行j += None,这自然会触发int和NoneType无法相加的类型错误。
正确的处理方式
如果你非要用单行写法,可以拆分操作,确保j +=的右值始终是整数:
all_lines = [["han"], ["and"], ['']] for line in all_lines: j += 1 if line == [''] else 0 monkeys[j-1].append(line) if line != [''] else None
但更推荐保持原有的多行写法,代码可读性更高,也不容易出错:
all_lines = [["han"], ["and"], ['']] for i, line in enumerate(all_lines): if line == ['']: j += 1 else: monkeys[j].append(line)
内容的提问来源于stack exchange,提问作者Dan Smith
相关产品推荐
相关产品推荐

