Python2.7调用列表append报NoneType无对应属性仅奇数n触发如何解决
错误触发原因
- Python中列表的
append()方法为原地修改操作,执行后无返回值(默认返回None)。你代码中奇数分支的df_2 = df_2.append(n-1)语句会将原本的列表对象覆盖为None,后续递归调用sol(n_2, df_2)时传入的df_2为None,尝试调用None.append()自然会抛出属性错误。 - 仅奇数n报错的原因是:只有当n为奇数时才会进入上述错误代码所在的else分支,偶数分支的
append操作未对返回值做赋值操作,因此不会出现列表被覆盖为None的问题。 - 补充逻辑缺陷:else分支处理完
df_2后未将其赋值给函数需要返回的df变量,即使修复了赋值问题,最终返回结果也不符合预期。
代码修正方案
修改else分支的错误赋值语句,同时补全返回值的赋值逻辑即可,修正后的完整代码如下:
def sol(n, df): if n == 1: result = df elif n == 2 or n == 0: df.append(1) result = df elif n % 2 == 0: df.append(n/2) df = sol(n/2, df) else: df_2 = df[:] # 去掉赋值操作,append直接修改原列表 df_2.append(n-1) n_2 = n-1 df_2 = sol(n_2, df_2) # 将处理后的df_2赋值给df,保证返回值正确 df = df_2 return df df = [] n = input('n == ') print(sol(n, df))
内容的提问来源于stack exchange,提问作者Igor
相关产品推荐
相关产品推荐

