SystemExit:调用parse_args()时出错2

Hai*_*aik 11 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

我怎么能解决这个问题?谢谢

dap*_*azz 17

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

$ python my_programme.py --arg1=5 --arg2=7
Run Code Online (Sandbox Code Playgroud)

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

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

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


joh*_*ual 16

[快速解决方案] 在代码中添加一个虚拟解析器参数

parser.add_argument('-f')
Run Code Online (Sandbox Code Playgroud)

  • Jupyter-Notebook 设置了一些默认参数。其中之一是“-f”。import sys sys.argv 运行上面的代码将显示它们 (3认同)
  • 嘿,它有效,但你能解释一下它是如何工作的吗? (2认同)

小智 14

遇到了类似的问题。添加这些行为我解决了这个问题。

import sys
sys.argv=['']
del sys
Run Code Online (Sandbox Code Playgroud)

  • 嗯...为什么有帮助?你能为读到它的人解释一下吗? (2认同)

Fra*_*sco 10

我很惊讶没有人在这里提到这个答案How to fix ipykernel_launcher.py: error: unrecognized argument in jupyter?

没有必要争论-f。此外,该-f技巧适用于 Jupyter,但不适用于 VS code。

太长了;博士

使用

args, unknown = parser.parse_known_args()
Run Code Online (Sandbox Code Playgroud)

代替

args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)


Łuk*_*ski 5

parse_args方法,当它被无参数调用时,会尝试解析sys.argv. 您的解释器进程填充了sys.argv与您的parser实例支持的参数不匹配的值,这就是解析失败的原因。

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

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