2017-02-15 979 views
1

我正在學習Python的基礎知識,並且在Argparse教程的開頭已經停滯不前。我收到以下錯誤:SystemExit:調用parse_args時發生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%命令提供了以下的輸出:

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 

我該如何解決這個問題? 感謝

+0

你不能在ipython中很容易地試驗這個,因爲在'parse_args'中默認使用ipython命令行。試試用普通的'* .py'文件和python可執行文件啓動該文件。 – languitar

+0

看到此[argparse](http://stackoverflow.com/questions/23714542/why-does-pythons-argparse-use-an-er- error-code-of-2-for-systemexit)。它會對你有幫助,或者肯定會對其他人有所幫助 –

+0

我已經複製了你的代碼,並且我沒有發現任何問題。你有沒有用.py文件而不是另一種方式嘗試它? –

回答

3

​​是設計用來解析從命令行傳遞的參數,因此,例如,如果你請在命令提示符下鍵入以下模塊:

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

您可以使用​​解釋--arg1=5 --arg2=7部分。如果​​認爲參數是無效的,它就會退出,通常在python中調用sys.exit(),這會引發SystemExit錯誤,這是您所看到的。

所以問題是你正在嘗試從交互式解釋器(看起來像ipython)使用​​,在這一點上程序已經開始,所以參數應該已經被解析。

要正確嘗試,請創建一個單獨的python文件,如my_programme.py,並使用python從命令行運行它,如我所示。

+0

是的,它是完全ipython,只是想說我多麼感謝你的明確答案!即使我花了幾個小時試圖自己弄清楚,似乎我需要更多的時間來解決這個問題。謝謝。 – Haik

2

parse_args方法,當它被稱爲沒有參數時,試圖解析內容sys.argv。您的解釋器流程填充了sys.argv,其值與您的parser實例支持的參數不匹配,這就是解析失敗的原因。

嘗試打印sys.argv以檢查傳遞給解釋器進程的參數。

嘗試調用parser.parse_args(['my', 'list', 'of', 'strings'])以查看解析器如何爲使用不同cmdline參數啓動的解釋器工作。

相關問題