我遇到了一个非常奇怪的问题 - 当我使用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。
我做错了什么?
答案 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)