SystemExit:调用parse_args时发生2错误()

SystemExit:调用parse_args时发生2错误()

问题描述:

我正在学习Python的基础知识,并且在Argparse教程的开头已经停滞不前。我收到以下错误:SystemExit:调用parse_args时发生2错误()

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

你不能在ipython中很容易地试验这个,因为在'parse_args'中默认使用ipython命令行。试试用普通的'* .py'文件和python可执行文件启动该文件。 – languitar

+0

看到此[argparse](http://stackoverflow.com/questions/23714542/why-does-pythons-argparse-use-an-er- error-code-of-2-for-systemexit)。它会对你有帮助,或者肯定会对其他人有所帮助 –

+0

我已经复制了你的代码,并且我没有发现任何问题。你有没有用.py文件而不是另一种方式尝试它? –

​​是设计用来解析从命令行传递的参数,因此,例如,如果你请在命令提示符下键入以下模块:

$ python my_programme.py --arg1=5 --arg2=7 

您可以使用​​解释--arg1=5 --arg2=7部分。如果​​认为参数是无效的,它就会退出,通常在python中调用sys.exit(),这会引发SystemExit错误,这是您所看到的。

所以问题是你正在尝试从交互式解释器(看起来像ipython)使用​​,在这一点上程序已经开始,所以参数应该已经被解析。

要正确尝试,请创建一个单独的python文件,如my_programme.py,并使用python从命令行运行它,如我所示。

+0

是的,它是完全ipython,只是想说我多么感谢你的明确答案!即使我花了几个小时试图自己弄清楚,似乎我需要更多的时间来解决这个问题。谢谢。 – Haik

parse_args方法,当它被称为没有参数时,试图解析内容sys.argv。您的解释器流程填充了sys.argv,其值与您的parser实例支持的参数不匹配,这就是解析失败的原因。

尝试打印sys.argv以检查传递给解释器进程的参数。

尝试调用parser.parse_args(['my', 'list', 'of', 'strings'])以查看解析器如何为使用不同cmdline参数启动的解释器工作。