1. ホーム
  2. python

[解決済み] SystemExit: ipython内でparse_args()を呼び出すと2エラーが発生する

2022-02-09 22:09:28

質問

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

を %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 は、引数が無効であると判断すると終了します。 sys.exit() を発生させます。 SystemExit というエラーが表示されます。

つまり、問題なのは、あなたが argparse は対話型インタプリタ(ipythonのようなもの)であり、この時点ではすでにプログラムが始まっているので、引数はすでにパースされているはずです。

正しく試すには、次のような別の Python ファイルを作成します。 my_programme.py を使って実行します。 python をコマンドラインから実行する方法を説明しました。