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

如何用ArgParse调用函数传参?调用function_3遇未识别参数错误

问题分析与解决

问题原因

你的代码和调用命令存在三个关键问题:

  1. 调用命令格式错误:使用子命令解析器时,必须先指定子命令fc3,再传递参数,而非直接使用--pass。
  2. 参数命名冲突:pass是Python关键字,不能用作argparse的参数名,会导致解析异常。
  3. 函数调用缺少参数:function_3需要接收一个参数,但你调用options.func()时未传递任何参数。

修复步骤

1. 修改代码中的参数名与函数调用

将参数名改为合法名称(如arg_pass),同时在调用函数时传递解析后的参数:

import argparse
import sys

def function_1():
    print('Function 1')

def function_2():
    print('Function 2')

def function_3(arg):
    print(f'Function 3 {arg}')

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    subparsers = parser.add_subparsers()
    
    parser_f1 = subparsers.add_parser('fc1', help='Function 1')
    parser_f1.set_defaults(func=function_1)

    parser_f2 = subparsers.add_parser('fc2', help='Function 2')
    parser_f2.set_defaults(func=function_2)

    parser_f3 = subparsers.add_parser('fc3', help='Function 3')
    # 修改参数名为合法名称
    parser_f3.add_argument("arg_pass", help="function 3 argument")
    parser_f3.set_defaults(func=function_3)
        
    if len(sys.argv) <= 1:
        sys.argv.append('--help')

    options = parser.parse_args()
    # 根据子命令判断是否传递参数
    if options.func == function_3:
        options.func(options.arg_pass)
    else:
        options.func()

2. 使用正确的调用命令

因为arg_pass是位置参数,直接在子命令后跟上参数值即可:

python script.py fc3 test

如果希望将参数改为可选参数(即使用--pass形式),可修改参数定义:

parser_f3.add_argument("--pass", dest="arg_pass", help="function 3 argument")

此时调用命令改为:

python script.py fc3 --pass test

验证结果

修改后运行对应命令,会输出:

Function 3 test

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:05:18