SystemExit:在 ipython 中调用 parse_args() 时出现 2 错误
SystemExit: 2 error when calling parse_args() within ipython
我正在学习 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
a %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
我该如何解决这个问题?
argparse
是一个模块,用于解析从 命令行 传递的参数,例如,如果您在命令提示符下键入以下内容:
$ python my_programme.py --arg1=5 --arg2=7
可以用argparse
来解释--arg1=5 --arg2=7
部分。如果 argparse
认为参数无效,它会退出,这通常在 python 中通过调用 sys.exit()
来完成,这会引发 SystemExit
错误,这就是您所看到的.
所以问题是你正在尝试从交互式解释器(看起来像 ipython)使用 argparse
,此时程序已经启动,所以 args 应该已经已解析。
要尝试正确地创建一个单独的 python 文件,例如 my_programme.py
和 运行 它使用 python
来自命令行,如我所示。
parse_args
方法,当它在没有参数的情况下被调用时,会尝试解析 sys.argv
的内容。您的解释器进程填充 sys.argv
的值与您的 parser
实例支持的参数不匹配,这就是解析失败的原因。
尝试打印 sys.argv
以检查传递给解释器进程的参数。
尝试调用 parser.parse_args(['my', 'list', 'of', 'strings'])
以查看解析器如何为使用不同的 cmdline 参数启动的解释器工作。
[快速解决方案]在代码中添加一个虚拟解析器参数
parser.add_argument('-f')
我知道这个问题已有将近三年的历史,但听起来很愚蠢,当您没有安装 argparse 时也会产生此退出错误,而不是默认的“找不到此模块”错误信息。只是帮助可能也有此错误的人。
运行 遇到过类似的问题。添加这些行解决了我的问题。
import sys
sys.argv=['']
del sys
添加参数并分配一些值有效。我将 args(ArgumentParser 类型对象)从一个函数传递到另一个函数(不是典型情况,例如从终端获取用户 args)。
from argparse import ArgumentParser
parser = ArgumentParser()
# create and assign a dummy args
parser.add_argument('--myarg1')
args = parser.parse_args(['--myarg1', ''])
args.myarg2 = True # actuals args assignment
myTargetFunction(args) # passing args to another function
我发现解析器中没有任何实际参数,parse_args() 给出错误。
我正在学习 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
a %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
我该如何解决这个问题?
argparse
是一个模块,用于解析从 命令行 传递的参数,例如,如果您在命令提示符下键入以下内容:
$ python my_programme.py --arg1=5 --arg2=7
可以用argparse
来解释--arg1=5 --arg2=7
部分。如果 argparse
认为参数无效,它会退出,这通常在 python 中通过调用 sys.exit()
来完成,这会引发 SystemExit
错误,这就是您所看到的.
所以问题是你正在尝试从交互式解释器(看起来像 ipython)使用 argparse
,此时程序已经启动,所以 args 应该已经已解析。
要尝试正确地创建一个单独的 python 文件,例如 my_programme.py
和 运行 它使用 python
来自命令行,如我所示。
parse_args
方法,当它在没有参数的情况下被调用时,会尝试解析 sys.argv
的内容。您的解释器进程填充 sys.argv
的值与您的 parser
实例支持的参数不匹配,这就是解析失败的原因。
尝试打印 sys.argv
以检查传递给解释器进程的参数。
尝试调用 parser.parse_args(['my', 'list', 'of', 'strings'])
以查看解析器如何为使用不同的 cmdline 参数启动的解释器工作。
[快速解决方案]在代码中添加一个虚拟解析器参数
parser.add_argument('-f')
我知道这个问题已有将近三年的历史,但听起来很愚蠢,当您没有安装 argparse 时也会产生此退出错误,而不是默认的“找不到此模块”错误信息。只是帮助可能也有此错误的人。
运行 遇到过类似的问题。添加这些行解决了我的问题。
import sys
sys.argv=['']
del sys
添加参数并分配一些值有效。我将 args(ArgumentParser 类型对象)从一个函数传递到另一个函数(不是典型情况,例如从终端获取用户 args)。
from argparse import ArgumentParser
parser = ArgumentParser()
# create and assign a dummy args
parser.add_argument('--myarg1')
args = parser.parse_args(['--myarg1', ''])
args.myarg2 = True # actuals args assignment
myTargetFunction(args) # passing args to another function
我发现解析器中没有任何实际参数,parse_args() 给出错误。