柑橘栀子花~ 发表于 7 天前

列表循环出现None

循环里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 =
      pins1[:] = pins2
      print(pins1)
      part_name = pins1
    elif '\n' == pins:
      note = ','.join(note)
      data = data.append((part_name,note))
      note1 = []
    else:
      pins1 = pins.split(' ')
      pins2 =
      pins1[:] = pins2
      pins3 = pins1
      note1 = note1.append(pins3)
      print(pins3)

爬虫121 发表于 7 天前

问题出在 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 =
      pins1[:] = pins2
      print(pins1)
      part_name = pins1
    elif '\n' == pins:
      note = ','.join(note1)# 这里应该是note1而不是note
      data.append((part_name,note))# 直接调用append,不要赋值
      note1 = []
    else:
      pins1 = pins.split(' ')
      pins2 =
      pins1[:] = pins2
      pins3 = pins1
      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 的错误了。

FishC 发表于 7 天前

代码问题出在列表初始化及append方法使用错误。请按以下方式修改:

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

修正后代码:

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(' ')
      # 下方应有处理pins1的代码(原代码不完整)
      part_name = pins1# 示例取第一个元素
    elif pins == '\n':# 换行判断更准确
      note = ','.join(note1)
      data.append((part_name, note))# 直接append,不要赋值
      note1 = []# 重置note1
    else:
      pins1 = pins.strip().split(' ')
      pins3 = pins1# 示例取第一个元素
      note1.append(pins3)# 直接append,不要赋值
      print(pins3)


关键修改点说明:

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


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

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

xiaoniugogogo 发表于 7 天前

data = data.append((part_name,note))
note1 = note1.append(pins3)
这两句改成
data.append((part_name,note))
note1.append(pins3)
这样试试呢

快速收敛 发表于 7 天前

列表append返回值是None,
data = data.append((part_name,note))
note1 = note1.append(pins3)
重新给列表赋值了成None
页: [1]
查看完整版本: 列表循环出现None