我正在学习Python的基础知识并且已经陷入了Argparse教程的开头。我收到以下错误:
import argparse
parser = argparse.ArgumentParser()
args = parser.parse_args()
usage: __main__.py [-h] echo
__main__.py: error: unrecognized arguments: -f
An exception has occurred, use %tb to see the full traceback.
SystemExit: 2
%tb命令提供以下输出:
SystemExit Traceback (most recent call last)
<ipython-input-16-843cc484f12f> in <module>()
----> 1 args = parser.parse_args()
C:\Users\Haik\Anaconda2\lib\argparse.pyc in parse_args(self, args, namespace)
1702 if argv:
1703 msg = _('unrecognized arguments: %s')
-> 1704 self.error(msg % ' '.join(argv))
1705 return args
1706
C:\Users\Haik\Anaconda2\lib\argparse.pyc in error(self, message)
2372 """
2373 self.print_usage(_sys.stderr)
-> 2374 self.exit(2, _('%s: error: %s\n') % (self.prog, message))
C:\Users\Haik\Anaconda2\lib\argparse.pyc in exit(self, status, message)
2360 if message:
2361 self._print_message(message, _sys.stderr)
-> 2362 _sys.exit(status)
2363
2364 def error(self, message):
SystemExit: 2
我该如何解决这个问题? 感谢
答案 0 :(得分:12)
argparse
是一个用于解析从命令行传递的参数的模块,例如,如果在命令提示符下键入以下内容:
$ python my_programme.py --arg1=5 --arg2=7
您可以使用argparse
来解释--arg1=5 --arg2=7
部分。如果argparse
认为参数无效,则会退出,这通常是在python中通过调用sys.exit()
来完成的,这会引发SystemExit
错误,这是您所看到的。< / p>
所以问题是你正在尝试使用交互式解释器中的argparse
(看起来像ipython),此时程序已经启动了,所以args应该已经被解析了。 / p>
要正确地尝试创建一个单独的python文件,例如my_programme.py
,然后从命令行使用python
运行它,如图所示。
答案 1 :(得分:3)
parse_args
方法在没有参数的情况下调用时会尝试解析sys.argv
的内容。您的解释器进程已使sys.argv
填充的值与您的parser
实例支持的参数不匹配,这就是解析失败的原因。
尝试打印sys.argv
以检查传递给解释器进程的参数。
尝试调用parser.parse_args(['my', 'list', 'of', 'strings'])
以查看解析器如何用于使用不同cmdline参数启动的解释器。
答案 2 :(得分:3)
遇到了类似的问题。添加这些行可以解决我的问题。
import sys
sys.argv=['']
del sys
答案 3 :(得分:2)
[快速解决方案]在代码中添加虚拟解析器参数
parser.add_argument('-f')
答案 4 :(得分:0)
我知道这个问题已经存在了将近三年,但听起来很愚蠢,当您没有安装argparse而不是默认的“无法找到此模块”错误消息时,也会产生此退出错误。只是也帮助可能有此错误的人。