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

python:argparser.add_argument()导致ArgumentError(),python,arguments,parameter-passing,Python,Arguments,Parameter Passing,我遇到了一个非常奇怪的问题-当我使用argparser.add_argument()方法时,我得到了ArgumentError() 我正在用pdb运行代码,这是我得到的错误: (Pdb) n ArgumentError: ArgumentError() > c:\py\googleapitest.py(48)<module>()->None -> help="ID of video to like.") 即使我没有传递“帮助”参数,我也会得到错误 我做错了什么?您

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

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

(Pdb) n
ArgumentError: ArgumentError()
> c:\py\googleapitest.py(48)<module>()->None
-> help="ID of video to like.")
即使我没有传递“帮助”参数,我也会得到错误


我做错了什么?

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

从:

oauth2client.tools.run\u flow()函数由 命令行标志和Python标准库argparse模块 必须在程序开始时初始化。包括Argparse 在Python2.7+中,并作为一个单独的包提供给较旧的 版本。下面显示了如何使用此功能的示例:

死而复生


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

什么是
argparser
argparser
实际上是一个
argparse
解析器:。代码中没有
--videoid
选项。此外,我尝试了示例代码,它对我有效(即,不会引发错误)。但是我使用GNU/Linux,我看到OP在Windows上运行代码——argparse在那里的行为会有所不同吗?现在我倾向于认为——videoid确实会添加到代码中其他地方的argparser中,就像@tdelaney所说的那样。你能看看吗?作为对该假设的一个简单测试,请尝试运行第一个列表中的确切代码,并查看是否出现了错误。此外,我浏览了
oauth2client
code,没有出现任何
videoid
现象。在添加参数之前,请查看
argparser.print\u help()
中已有的内容。如果在添加参数之前看到该参数,则是其他人做的。另一个证据:。因此,在使用oauth2client.tools.argparser时,不需要初始化解析器。这不太正确。您需要添加argparser作为父级,才能将其选项添加到命令行中。虽然这可能不是一个好的做法,但我不明白为什么原则上不能直接使用
argparser
。只有当您需要创建多个解析器时,才会出现问题,每个解析器都需要将
argparser
作为父级。@Werkriter在任何情况下,我使用argparser(如此处-)时,都会出现错误。当我使用argparse实现我自己的argparser时,包括tools.py模块()中的确切参数——一切正常。只有当我使用他们的argparser时,它才起作用。真奇怪。也许这真的是一个操作系统问题,这是我使用工具时的错误。py的argparser ArgumentError:参数--videoid:冲突选项字符串--VideoIDOP不遵循文档中概述的实践,您的答案并没有真正解决他的问题-当在
argparser
上调用
argparse.ArgumentParser.add_argument
时会出现错误,这在原则上应该是可能的。@werkritter我已经按照Google指南上的说明进行了操作-@werkritter我仔细查看了源代码,您是对的。这不会解决问题的!我会删除它。
(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)
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)
import argparse
from oauth2client import tools

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