2017-02-15 10 views
1

私はPythonの基礎を学んでおり、すでにArgparseチュートリアルの初めに立ち往生しています。私は次のエラーを取得しています:SystemExit:parse_args()を呼び出すときに2つのエラーが発生する

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 

私はこの問題を解決することができる方法:

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のコマンドは次の出力を与えますか? おかげ

+0

ipythonのコマンドラインは 'parse_args'のデフォルトで使用されるので、これをipythonで簡単に試すことはできません。通常の '* .py'ファイルとpython実行可能ファイルでこのファイルを起動してみてください。 – languitar

+0

[argparse](http://stackoverflow.com/questions/23714542/why-does-pythons-argparse-use-an-error-code-of-2-for-systemexit)を参照してください。それはあなたに役立つ、または確かに他の人に役立ちます –

+0

私はあなたのコードを再現しましたが、私は問題を見つけることはありません。別の方法ではなく.pyファイルで試しましたか? –

答えて

3

​​は、たとえば、コマンドプロンプトで次のように入力している場合ので、コマンドラインから渡された引数を解析するために設計されたモジュールである:

$ python my_programme.py --arg1=5 --arg2=7 

あなたが解釈し​​を使用することができます--arg1=5 --arg2=7部分。​​が引数が無効であると判断した場合は、終了します。これは一般的にはsys.exit()を呼び出してSystemExitエラーを発生させます。これはあなたが見ているものです。

対話型インタプリタ(ipythonのように見える)から​​を使用しようとしていて、この時点でプログラムが既に起動しているため、argsはすでに解析されているはずです。

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

+0

はい、言いたいことは、あなたの明確な答えがどれくらいの価値があるかです。そして私は数時間かけて自分自身を見つけ出そうとしましたが、この問題だけを解決するにはもう少し日が必要なようです。ありがとうございました。 – Haik

2

parse_argsメソッドは、引数なしで呼び出されたときに、内容を解析しようとします(sys.argv)。あなたのインタプリタプロセスは、sys.argvの値にparserインスタンスでサポートされている引数と一致しない値を入力しました。そのため、解析が失敗します。

sys.argvを印刷して、どの引数がインタープリタプロセスに渡されたかを確認してください。

parser.parse_args(['my', 'list', 'of', 'strings'])を呼び出すと、異なるcmdline引数で起動されたインタープリタでパーサがどのように動作するかを確認できます。

関連する問題