python:argparser.add_argument()导致ArgumentError()

时间:2016-02-06 21:18:42

标签: python arguments parameter-passing

我遇到了一个非常奇怪的问题 - 当我使用argparser.add_argument()方法时,我得到ArgumentError()

from oauth2client.tools import argparser, run_flow

if __name__ == "__main__":
  argparser.add_argument("--videoid", default="L-oNKK1CrnU",
    help="ID of video to like.")

我正在使用pdb运行代码,这是我得到的错误:

(Pdb) n
ArgumentError: ArgumentError()
> c:\py\googleapitest.py(48)<module>()->None
-> help="ID of video to like.")

这是根本原因:

C:\Python27\lib\argparse.pyc in _handle_conflict_error(self, action, conflicting_actions)
   1452                                      for option_string, action
   1453                                      in conflicting_actions])
-> 1454         raise ArgumentError(action, message % conflict_string)

即使我没有通过&#34; help&#34;我也会收到错误。 PARAM。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

来自auth2 docs

  

oauth2client.tools.run_flow()函数由   命令行标志和Python标准库argparse模块   必须在程序开始时初始化。包括Argparse   在Python 2.7+中,可作为旧版本的单独包   版本。以下显示了如何使用此功能的示例:

import argparse
from oauth2client import tools

parser = argparse.ArgumentParser(parents=[tools.argparser])
flags = parser.parse_args()

从死里复活

在某些环境(例如pdb)中重新启动脚本后,会出现原始问题。重新启动时,主脚本会再次运行,但旧的导入脚本(包括对oath2client.tools.argparser的更改)仍然存在。解决方案如文档中所述,使用oauth2client的解析器作为父级创建自己的解析器。这样,您只需将参数添加到在启动时重新创建的解析器。

答案 1 :(得分:1)

您必须初始化解析器。我只是这样做(我认为oauth.tools实际上是链接到argparse):

import argparse

def main(args):
    pass
    #reference args.videoid to use in the code

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--videoid", dest='videoid',default="L-oNKK1CrnU", help="ID of video to like.")
    args = parser.parse_args()
    main(args)