SystemExit:调用parse_args()时出错2

时间:2017-02-15 12:53:46

标签: python

我正在学习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

我该如何解决这个问题? 感谢

5 个答案:

答案 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而不是默认的“无法找到此模块”错误消息时,也会产生此退出错误。只是也帮助可能有此错误的人。