参数解析。名为 "args" 的变量的有趣问题

Argparse. Funny issue with variable named "args"

我注意到我的一个脚本不是 运行 因为 argparse 解析器无法 parse_args()。

if __name__ == "__main__":
    import argparse

    parser = argparse.ArgumentParser(description="Save a plot to file")
    parser.add_argument('input_directory', metavar='i', type=str, default='.',
                        help='The input directory')

    parser.add_argument('output_file', metavar='o', type=str,
                        help='The output filename')

    parser.add_argument('--fix', type=str, default=None,
                        help='If FIX, the txt containing fix classification results')

    args = parser.parse_args()

    import ipdb; ipdb.set_trace()

奇怪的是,我注意到问题与名为 args 的变量有关。我无法从该变量中检索任何信息,因为它总是 return 是空的。 如果我将 args 变量的名称更改为其他任何名称,则脚本可以正常工作。

我问这个问题是因为我找不到任何信息告诉我 args 是一个关键字,或者其他任何东西。

我将我的脚本调用为:

python3 plotter.py --fix $(pwd)/fix.txt $(pwd) $(pwd)/plot.png

这是该有趣行为的屏幕截图:

请注意包含单词 args 的任何语句如何不 return。

对这里可能发生的事情有什么想法吗?

尝试使用 vars()

args = vars(parser.parse_args())

然后使用

检索
some_val = args['some']

也参考这个Whosebug post

ipdb/__main__.py 在其 main 中设置 args:

def main():
    ...
    opts, args = getopt.getopt(sys.argv[1:], 'hc:', ['--help', '--command='])

我不知道 运行 交互时可见的内容,但我怀疑它自己对 args 的使用会干扰您使用

看到的内容
args = parser.parse_args(...)

在测试argparse的时候,我例行加了一个

print(args)

声明。或者我在 ipython 会话中测试它,我可以在其中查看 parse_args 的结果而无需进一步工作。

您可以通过在变量名前加上感叹号来引用 args 变量名:

ipdb> !args

args其实是ipdb使用的命令,见here:

解释:

a(rgs)
Print the argument list of the current function.