You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python脚本保存命令行参数到JSON时出现列表嵌套问题

问题根因

出现嵌套列表、功能不符合预期是3个逻辑错误导致的:

  • 列表方法使用错误:sys.argv[1:]本身就是存储所有命令行参数的列表,用append()方法会把整个参数列表作为单个元素存入空列表,直接生成[ [参数1, 参数2, ...] ]的嵌套结构。
  • 文件操作逻辑错误:使用a+追加模式打开文件,会导致多次运行后文件内拼接多段JSON内容,变成无法解析的非法格式;且代码中手动打开的文件句柄根本没有被后续读写函数使用,属于无效操作。
  • 流程顺序错误:每次运行都重新初始化空列表my_list = [],完全没有读取文件内已存储的历史内容,之前保存的参数会被直接覆盖。
修正后可运行代码
#!/usr/bin/python3
import sys
import os

save_to_json_file = __import__('5-save_to_json_file').save_to_json_file
load_from_json_file = __import__('6-load_from_json_file').load_from_json_file

filename = "add_item.json"
# 文件存在则加载历史列表,不存在则初始化为空列表
if os.path.exists(filename):
    my_list = load_from_json_file(filename)
else:
    my_list = []

# 逐个添加新传入的命令行参数,不会生成嵌套结构
my_list.extend(sys.argv[1:])

# 全量覆盖写入文件,保证JSON格式合法
save_to_json_file(my_list, filename)
关键改动说明
  • 将my_list.append(args[1:])替换为my_list.extend(sys.argv[1:]):extend会把传入可迭代对象的每个元素逐个加入列表,从根源避免嵌套结构。
  • 移除冗余的手动文件打开逻辑:save_to_json_file和load_from_json_file会自行处理文件的打开关闭,不需要提前手动操作文件。
  • 增加历史内容加载步骤:脚本启动优先读取已存储的列表数据,再追加新参数,不会丢失之前保存的内容。
  • 改用覆盖写入模式:由save_to_json_file默认通过w模式写入完整JSON结构,避免追加模式导致的文件格式损坏。

内容的提问来源于stack exchange,提问作者Eiden Martinez Davila

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 00:39:25