【问题标题】:Argparse. Funny issue with variable named "args"解析。名为“args”的变量的有趣问题
【发布时间】:2017-12-16 23:01:33
【问题描述】:

我注意到我的一个脚本没有运行,因为 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 的变量有关。我无法从该变量中检索任何信息,因为它总是返回空。 如果我将 args 变量的名称更改为其他任何名称,则脚本可以正常工作。

我问这个问题是因为我找不到任何信息告诉我args 是关键字或其他任何内容。

我将我的脚本调用为:

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

这是一个有趣行为的截图:

注意任何包含单词args 的语句不会返回。

对这里可能发生的事情有任何想法吗?

【问题讨论】:

  • 普通的print(args) 有效吗?也许ipdb 正在使用args 来达到自己的目的?

标签: python-3.x argparse


【解决方案1】:

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

ipdb> !args

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

说明:

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

【讨论】:

    【解决方案2】:

    尝试使用vars()

    args = vars(parser.parse_args())
    

    然后使用检索

    some_val = args['some']
    

    也可以参考这个stackoverflow post

    【讨论】:

      【解决方案3】:

      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 的结果而无需进一步工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-13
        • 1970-01-01
        • 2011-05-03
        • 2011-11-27
        • 1970-01-01
        相关资源
        最近更新 更多