Python SystemExit:调用parse_args()时出现2个错误

Python SystemExit:调用parse_args()时出现2个错误,python,argparse,Python,Argparse,我正在学习Python的基础知识,并且在argparse教程的开头就已经被卡住了。我得到以下错误: import argparse parser=argparse.ArgumentParser() args=parser.parse_args() 用法:\uuuuu main\uuuuu.py[-h]echo __main.py:错误:无法识别的参数:-f 发生异常,请使用%tb查看完整回溯。 系统出口:2 %tb命令提供以下输出: SystemExit回溯(最近一次调用) 在() ----

我正在学习Python的基础知识,并且在argparse教程的开头就已经被卡住了。我得到以下错误:

import argparse
parser=argparse.ArgumentParser()
args=parser.parse_args()
用法:\uuuuu main\uuuuu.py[-h]echo
__main.py:错误:无法识别的参数:-f
发生异常,请使用%tb查看完整回溯。
系统出口:2
%tb命令提供以下输出:

SystemExit回溯(最近一次调用)
在()
---->1 args=parser.parse_args()
C:\Users\Haik\Anaconda2\lib\argparse.pyc在parse_args(self、args、命名空间)中
1702如果argv:
1703 msg=(('无法识别的参数:%s')
->1704自身错误(消息%''.join(argv))
1705返回参数
1706
C:\Users\Haik\Anaconda2\lib\argparse.pyc出错(self,message)
2372         """
2373自我打印使用(_sys.stderr)
->2374 self.exit(2,u307;(“%s:错误:%s\n')%(self.prog,消息))
C:\Users\Haik\Anaconda2\lib\argparse.pyc处于退出状态(self、status、message)
2360如果消息:
2361自打印消息(消息,系统标准)
->2362 _系统退出(状态)
2363
2364 def错误(自身,消息):
系统出口:2

如何解决此问题?

argparse
是一个模块,用于分析从命令行传递的参数,例如,如果在命令提示符下键入以下内容:

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

因此,问题是您试图从交互式解释器(看起来像ipython)使用
argparse
,此时程序已经启动,因此args应该已经被解析


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

parse_args
方法,当在没有参数的情况下调用它时,会尝试解析
sys.argv
的内容。您的解释器进程已满
sys.argv
对于与
解析器
实例支持的参数不匹配的值,这就是解析失败的原因

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

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

[quick solution]在代码中添加一个伪解析器参数

parser.add_参数('-f')

我知道这个问题已经问了将近三年了,但听起来很愚蠢,当您没有安装argparse而不是默认的“找不到此模块”时,也会产生这个退出错误“错误消息。仅仅是帮助那些可能也有此错误的人。

也遇到了类似的问题。添加这些行修复了我的问题

import sys
sys.argv=['']
del sys

您不能在ipython中轻松地进行此实验,因为在
parse_args
中,每个默认值都将使用ipython命令行。用一个普通的
*.py
文件和python可执行文件来启动该文件,试试看。这将对你或其他人有所帮助。我已经复制了你的代码,我没有发现任何问题。您是否在.py文件中而不是以其他方式进行了尝试?或者,在ipython中,您可以将参数列表传递给解析器。从argparse文档中:
parser.parse_args(['--sum',7','-1',42'])
parser.parse_args('--sum 7-1 42'.split())
感谢你们立即帮助我指出我的错误所在,并提供了另一种方法,我尝试了不同的方法,但都是用ipython,而不是“正常的”*.pyyes确实是ipython,我只想说我非常感谢你的明确回答!即使我自己也花了几个小时试图解决这个问题,但似乎我需要更多的时间来独自解决这个问题。谢谢。嘿,它工作了,但你能解释一下它是如何工作的吗?Jupyter笔记本设置了一些默认参数。其中之一是“-f”。运行上述代码的import sys.argv将显示如何不安装?这是一个标准的库模块。嗯。。。为什么会有帮助?你能给来读它的人解释一下吗?