第一个 Python argparse 位置参数只能是 str 类型吗?

Posted

技术标签:

【中文标题】第一个 Python argparse 位置参数只能是 str 类型吗?【英文标题】:Can first Python argparse positional argument only be of type str? 【发布时间】:2021-12-21 12:10:13 【问题描述】:

我是否正确假设添加到argparse.ArgumentParser() 实例的第一个强制位置参数只能是str 类型?

当我将其设置为 float(或 int)并在 shell 中运行脚本时,我收到 invalid float value 错误。不管我是真的传入float 还是调用-h 寻求帮助,都应该跳过参数输入直接跳转到帮助部分。

import argparse

parser = argparse.ArgumentParser(
    prog="add-expense"
)

parser.add_argument(
    "Amount",
    type=float
)

args = parser.parse_args()

当我在其前面放置另一个默认类型为strparser.add_argument() 时,一切正常。

【问题讨论】:

【参考方案1】:

加上一个

print(args)

您的脚本运行良好:

1013:~/mypy$ python3 stack69887099.py -h
usage: add-expense [-h] Amount

positional arguments:
  Amount

optional arguments:
  -h, --help  show this help message and exit
1013:~/mypy$ python3 stack69887099.py 1.232
Namespace(Amount=1.232)
1013:~/mypy$ python3 stack69887099.py test
usage: add-expense [-h] Amount
add-expense: error: argument Amount: invalid float value: 'test'

【讨论】:

以上是关于第一个 Python argparse 位置参数只能是 str 类型吗?的主要内容,如果未能解决你的问题,请参考以下文章

子命令中选项的 argparse 冲突解决程序将关键字参数转换为位置参数

python argparse命名位置参数?

如何根据 Python 中的位置参数与 argparse 的组合设置不同的选项?

Python argparse 位置参数和子命令

帮助文本中的 Python argparse 参数顺序

python3中argparse模块