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
我该如何解决这个问题? 感谢
是设计用来解析从命令行传递的参数,因此,例如,如果你请在命令提示符下键入以下模块:
$ python my_programme.py --arg1=5 --arg2=7
您可以使用解释--arg1=5 --arg2=7
部分。如果认为参数是无效的,它就会退出,通常在python中调用sys.exit()
,这会引发SystemExit
错误,这是您所看到的。
所以问题是你正在尝试从交互式解释器(看起来像ipython)使用,在这一点上程序已经开始,所以参数应该已经被解析。
要正确尝试,请创建一个单独的python文件,如my_programme.py
,并使用python
从命令行运行它,如我所示。
是的,它是完全ipython,只是想说我多么感谢你的明确答案!即使我花了几个小时试图自己弄清楚,似乎我需要更多的时间来解决这个问题。谢谢。 – Haik
parse_args
方法,当它被称为没有参数时,试图解析内容sys.argv
。您的解释器流程填充了sys.argv
,其值与您的parser
实例支持的参数不匹配,这就是解析失败的原因。
尝试打印sys.argv
以检查传递给解释器进程的参数。
尝试调用parser.parse_args(['my', 'list', 'of', 'strings'])
以查看解析器如何为使用不同cmdline参数启动的解释器工作。
你不能在ipython中很容易地试验这个,因为在'parse_args'中默认使用ipython命令行。试试用普通的'* .py'文件和python可执行文件启动该文件。 – languitar
看到此[argparse](http://stackoverflow.com/questions/23714542/why-does-pythons-argparse-use-an-er- error-code-of-2-for-systemexit)。它会对你有帮助,或者肯定会对其他人有所帮助 –
我已经复制了你的代码,并且我没有发现任何问题。你有没有用.py文件而不是另一种方式尝试它? –