鱼C论坛

 找回密码
 立即注册
查看: 97|回复: 5

[已解决]列表循环出现None

[复制链接]
发表于 4 天前 | 显示全部楼层 |阅读模式
60鱼币
循环里note1设定为空列表,但是报错显示note1 = None,哪位大佬帮看看是什么问题
filename = 'pins.asc'
note1 = []
data = []
with open(filename, encoding='utf-8') as f:
    pinss = f.readlines()
for pins in pinss:
    if 'Part' in pins:
        pins1 = pins.split(' ')
        pins2 = [item for item in pins1 if item.strip()]
        pins1[:] = pins2
        print(pins1)
        part_name = pins1[1]
    elif '\n' == pins:
        note = ','.join(note)
        data = data.append((part_name,note))
        note1 = []
    else:
        pins1 = pins.split(' ')
        pins2 = [item for item in pins1 if item.strip()]
        pins1[:] = pins2
        pins3 = pins1[5]
        note1 = note1.append(pins3)
        print(pins3)
最佳答案
4 天前
问题出在 note1 = note1.append(pins3) 和 data = data.append((part_name,note)) 这两行代码上。

在 Python 中,list.append() 方法是原地修改列表(即直接修改原列表而不返回新列表),它的返回值是 None。所以当你执行 note1 = note1.append(pins3) 时,实际上是把 None 赋值给了 note1,导致后续操作报错。

同样的问题也存在于 data = data.append((part_name,note))。

修正后的代码应该是:

python
filename = 'pins.asc'
note1 = []
data = []
with open(filename, encoding='utf-8') as f:
    pinss = f.readlines()
for pins in pinss:
    if 'Part' in pins:
        pins1 = pins.split(' ')
        pins2 = [item for item in pins1 if item.strip()]
        pins1[:] = pins2
        print(pins1)
        part_name = pins1[1]
    elif '\n' == pins:
        note = ','.join(note1)  # 这里应该是note1而不是note
        data.append((part_name,note))  # 直接调用append,不要赋值
        note1 = []
    else:
        pins1 = pins.split(' ')
        pins2 = [item for item in pins1 if item.strip()]
        pins1[:] = pins2
        pins3 = pins1[5]
        note1.append(pins3)  # 直接调用append,不要赋值
        print(pins3)
主要修改:

移除了 note1 = note1.append(pins3) 中的赋值,改为直接 note1.append(pins3)

移除了 data = data.append((part_name,note)) 中的赋值,改为直接 data.append((part_name,note))

修正了 note = ','.join(note) 应该是 note = ','.join(note1)(假设你想连接的是 note1 列表)

这样修改后应该就不会出现 note1 = None 的错误了。

最佳答案

查看完整内容

问题出在 note1 = note1.append(pins3) 和 data = data.append((part_name,note)) 这两行代码上。 在 Python 中,list.append() 方法是原地修改列表(即直接修改原列表而不返回新列表),它的返回值是 None。所以当你执行 note1 = note1.append(pins3) 时,实际上是把 None 赋值给了 note1,导致后续操作报错。 同样的问题也存在于 data = data.append((part_name,note))。 修正后的代码应该是: python filename = ' ...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 4 天前 | 显示全部楼层    本楼为最佳答案   
问题出在 note1 = note1.append(pins3) 和 data = data.append((part_name,note)) 这两行代码上。

在 Python 中,list.append() 方法是原地修改列表(即直接修改原列表而不返回新列表),它的返回值是 None。所以当你执行 note1 = note1.append(pins3) 时,实际上是把 None 赋值给了 note1,导致后续操作报错。

同样的问题也存在于 data = data.append((part_name,note))。

修正后的代码应该是:

python
filename = 'pins.asc'
note1 = []
data = []
with open(filename, encoding='utf-8') as f:
    pinss = f.readlines()
for pins in pinss:
    if 'Part' in pins:
        pins1 = pins.split(' ')
        pins2 = [item for item in pins1 if item.strip()]
        pins1[:] = pins2
        print(pins1)
        part_name = pins1[1]
    elif '\n' == pins:
        note = ','.join(note1)  # 这里应该是note1而不是note
        data.append((part_name,note))  # 直接调用append,不要赋值
        note1 = []
    else:
        pins1 = pins.split(' ')
        pins2 = [item for item in pins1 if item.strip()]
        pins1[:] = pins2
        pins3 = pins1[5]
        note1.append(pins3)  # 直接调用append,不要赋值
        print(pins3)
主要修改:

移除了 note1 = note1.append(pins3) 中的赋值,改为直接 note1.append(pins3)

移除了 data = data.append((part_name,note)) 中的赋值,改为直接 data.append((part_name,note))

修正了 note = ','.join(note) 应该是 note = ','.join(note1)(假设你想连接的是 note1 列表)

这样修改后应该就不会出现 note1 = None 的错误了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 4 天前 | 显示全部楼层
代码问题出在列表初始化及append方法使用错误。请按以下方式修改:


主要问题分析:
1. 列表未正确初始化:note1需要初始化为空列表
2. append方法误用:列表的append()方法没有返回值(返回None),不能赋值给变量
3. data列表未初始化:使用append前需要先创建列表

修正后代码:

  1. filename = 'pins.asc'
  2. note1 = []  # 初始化空列表
  3. data = []   # 初始化空列表

  4. with open(filename, encoding='utf-8') as f:
  5.     pinss = f.readlines()

  6. for pins in pinss:
  7.     if 'Part' in pins:
  8.         pins1 = pins.split(' ')
  9.         # 下方应有处理pins1的代码(原代码不完整)
  10.         part_name = pins1[0]  # 示例取第一个元素
  11.     elif pins == '\n':  # 换行判断更准确
  12.         note = ','.join(note1)
  13.         data.append((part_name, note))  # 直接append,不要赋值
  14.         note1 = []  # 重置note1
  15.     else:
  16.         pins1 = pins.strip().split(' ')
  17.         pins3 = pins1[0]  # 示例取第一个元素
  18.         note1.append(pins3)  # 直接append,不要赋值
  19.         print(pins3)
复制代码


关键修改点说明:
  • 所有 xxx = xxx.append() 的写法都要改为直接调用 .append()
  • 列表必须显式初始化为空列表 note1 = []
  • 处理换行时重置note1列表而不是赋空值
  • 添加了列表索引示例(原代码缺少具体处理逻辑)


建议检查分割后的pins1处理逻辑,原代码中的 pins2 = pins1 = pins2 缺少实际内容需要补充完整。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

点评

我很赞同!: 5.0
我很赞同!: 5
  发表于 4 天前
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 4 天前 | 显示全部楼层
data = data.append((part_name,note))
note1 = note1.append(pins3)
这两句改成
data.append((part_name,note))
note1.append(pins3)
这样试试呢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 4 天前 | 显示全部楼层
列表append返回值是None,
  1. data = data.append((part_name,note))
  2. note1 = note1.append(pins3)
复制代码

重新给列表赋值了成None
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-31 15:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表