【问题标题】:argparse is exiting if no argument is parsed [closed]如果没有解析任何参数,则 argparse 将退出 [关闭]
【发布时间】:2021-07-30 17:41:19
【问题描述】:

我正在使用 argparse 并且某些参数需要一个值。 例如,在我的论点中

lst -pln -pk 

lst sotore true,-pln 也存储真实值, 但是 -pk 需要输入一个值。

当我输入-pk 没有值时,它显示以下错误并退出。

错误:参数 -pk/--package:需要一个参数

但我不希望程序退出。相反,我想显示无效的输入错误消息并在我的程序中继续 while 循环。

注意:在我的程序中,我使用了一个 while 循环来继续程序,直到用户输入 exit 并按 enter。它工作正常。

【问题讨论】:

  • 你可以将exit_on_error=False传递给argparse.ArgumentParser的构造函数。
  • 或者更改解析器的error/exit方法。
  • 一般input很小,不需要复杂的argparse解析。

标签: python argparse


【解决方案1】:

使用nargs="?"

来自docs

ArgumentParser 对象通常将单个命令行参数与要执行的单个操作相关联。 nargs 关键字参数将不同数量的命令行参数与单个操作相关联。支持的值为:

  • (...)
  • '?'。如果可能,将从命令行使用一个参数,并将其作为单个项目生成。如果不存在命令行参数,则将生成默认值。

例子:

$ cat test.py
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("-pk", nargs="?")
args = parser.parse_args()

print(args)
$ python3 test.py -pk 123
Namespace(pk='123')
$ python3 test.py -pk
Namespace(pk=None)

【讨论】:

    猜你喜欢
    • 2020-03-25
    • 2016-11-25
    • 1970-01-01
    • 2021-07-13
    • 2014-02-21
    • 2015-04-09
    • 1970-01-01
    • 2021-03-15
    • 2020-11-17
    相关资源
    最近更新 更多