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

使用argparse传递字典字符串时出现解包错误的求助

解决Python脚本解析字典参数时的"not enough values to unpack"错误

让我来帮你排查这个问题,你遇到的not enough values to unpack (expected 2, got 1)错误根源和修复方法如下:

错误原因分析

当你用json.loads(args.dict)解析出字典后,直接用for folder, files in 字典遍历,Python默认只会遍历字典的键(比如"a"、"s"),每次循环只能拿到单个字符串,而你试图把它拆成folder和files两个变量,自然就触发了解包错误。

修复步骤及完整代码

我会分点修正你的代码,同时优化一些细节:

  1. 正确遍历字典的键值对:使用字典的.items()方法,这样才能同时获取键(文件夹路径)和对应的值(文件列表)
  2. 修正subprocess调用方式:subprocess.call的列表参数需要将命令和参数分开传递,不能把"rm -r"作为单个元素(否则Python会把整个字符串当作命令去查找,导致执行失败)
  3. 优化参数解析:直接给--dict参数指定type=json.loads,让argparse自动帮你解析JSON字符串,省去手动调用json.loads的步骤

修复后的完整代码:

import argparse
import subprocess as sp
import json

def main():
    parser = argparse.ArgumentParser()
    # 直接指定type为json.loads,自动解析JSON参数
    parser.add_argument('--dict', help='Directory and Files', required=True, type=json.loads)
    args = parser.parse_args()
    try:
        # 用.items()遍历字典的键值对
        for folder, files in args.dict.items():
            for file in files:
                # 拆分命令和参数为列表元素
                sp.call(["rm", "-r", folder + file])
    except Exception as e:
        print(e)

if __name__ == '__main__':
    main()

额外注意事项

你在终端执行的命令python3 "./cleanuplogs.py" --dict='{"a":["anv", "huj"], "s":["dc", "dc"]}'是没问题的(bash环境下单引号包裹JSON字符串可以避免转义问题),如果是在其他shell(比如zsh)遇到引号解析问题,可以尝试把单引号换成双引号,同时转义JSON里的双引号:python3 "./cleanuplogs.py" --dict="{\"a\":[\"anv\", \"huj\"], \"s\":[\"dc\", \"dc\"]}"

内容的提问来源于stack exchange,提问作者pretty08

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:16:08