【问题标题】:Python: how to handle the exceptions of argparse?Python:如何处理 argparse 的异常?
【发布时间】:2011-11-04 15:16:47
【问题描述】:

我想这样使用我的程序:

pythonScript -f 文件名

但是如果我忘记了-f,我还是想得到文件名。

所以我希望这个“pythonScript 文件名”也能工作(->我可以从 args.fileName 或从处理异常中获取文件名)

我知道这一定很容易,我只是找不到方法。任何人都可以帮助我吗?谢谢

import argparse
parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('-f', action='store', dest='fileName',
    default = None, type=str, help='The file name')

try:
    args = parser.parse_args()
except:
    print "xxx"

【问题讨论】:

  • 这是意料之中的好事。 -* 是一个标志,并且 option - 它不是必需的。另外,您从未声明它应该是必需的,相反,您甚至提供了默认值。
  • 哦,我的意思是如果我忘记了-f,我仍然想获取文件名。很抱歉造成混乱

标签: python argparse


【解决方案1】:

如果您希望 -f 是必需的,您可以使用 argparse 来实现。只需在 add_argument 函数中包含“required = True”即可。

请记住,必需选项是矛盾的。不建议使选项成为必需,但有时会有所帮助。如果未给出该选项,则目的地仍然是 None 值(或者它被分配您给出的任何默认值,在您的示例中为 None )。

编辑:刚刚看到你的编辑,我明白你现在在问什么。 optparse 使这个更简单的 IMO。似乎对于带有 argparse 的位置参数,您需要使用 add_argument。

真的没有简单的方法让 argparse 为你做这件事。您可以通过以下方式创造性地模拟它:

parser = argparse.ArgumentParser()
parser.add_argument('file', nargs='?')
parser.add_argument('-f', dest='file_opt')
args = parser.parse_args()
if args.file_opt:
    args.file = args.file_opt

基本上,如果给出了文件选项,它会覆盖位置参数。

【讨论】:

  • 谢谢,但我实际上希望 -f 是可选的,请参阅我更新的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多