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

Python如何通过argparse等工具将元组列表作为命令行参数传入

你遇到的报错是因为Shell中()属于特殊语法字符,不会直接作为参数传递给Python程序,以下是两种可直接复用的实现方案:

方案1:传入带引号的元组字符串,自定义解析函数

该方案贴合你原来的传参习惯,仅需对入参做简单解析:

  1. 先自定义元组解析函数,将传入的字符串格式元组转成Python可识别的元组类型
  2. 传参时给每个元组加单/双引号,规避Shell语法报错

完整修改后代码

import argparse

def parse_pair(s):
    # 去掉字符串两端的括号,拆分数字后转成int元组
    s = s.strip('()')
    return tuple(map(int, s.split(',')))

def test(args):
    print("----")
    print(args.pairs)
    # 可直接按索引访问元素,例如下方打印第一个元组的第二个元素
    print("测试访问元素:", args.pairs[0][1])

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--pairs', type=parse_pair, nargs='+')
    args = parser.parse_args()
    
    print("===args===")
    for arg in vars(args):
        print(arg, getattr(args, arg))
    
    test(args)

执行命令

python test.py --pairs "(1,2)" "(2,4)" "(5,6)"

方案2:传入JSON格式字符串,一次性解析

如果元组数量多、结构复杂,更推荐用JSON格式传参,无需单独处理每个元组:

  1. 直接传入整个列表的JSON字符串,用json.loads自动解析
  2. 按需将列表转成元组即可

完整修改后代码

import argparse
import json

def test(args):
    # 转成元组列表格式
    args.pairs = [tuple(item) for item in args.pairs]
    print("----")
    print(args.pairs)
    print("测试访问元素:", args.pairs[0][1])

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--pairs', type=json.loads)
    args = parser.parse_args()
    
    print("===args===")
    for arg in vars(args):
        print(arg, getattr(args, arg))
    
    test(args)

执行命令

python test.py --pairs '[[1,2],[2,4],[5,6]]'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:06:02