Python:如何处理argparse的异常?
我想这样使用我的程序:
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"
1 个回答
3
如果你想让 -f 这个选项成为必填项,可以通过 argparse 来实现。只需要在 add_argument 函数里加上 "required = True" 就可以了。
记住,必填选项这个概念有点矛盾。虽然不建议把选项设为必填,但有时候这样做是有帮助的。如果没有提供这个选项,那么目标值会保持为 None(或者会被赋予你设定的默认值,在你的例子中是 None)。
编辑:刚看到你的更新,现在我明白你在问什么了。个人觉得 optparse 让这件事更简单。看起来对于位置参数,使用 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
基本上,如果给定了文件选项,它会覆盖位置参数。