我測試了一些argparse代碼。我想要有一個可選的參數,它從選項列表中收集數量爲n
的輸入。所以,我寫道:用argparse殺死解釋器
import argparse
modules = ["geo", "loc"]
parser = argparse.ArgumentParser()
parser.add_argument("--modules", nargs='*', choices=modules)
有了這個設置,我可靠地完全殺死了解釋器。
如果你通過一個有效的組參數,它工作正常:
>>> parser.parse_args("--module geo loc geo".split())
Namespace(modules=['geo', 'loc', 'geo'])
但是,如果你在想念形成參數傳遞,它殺死蟒蛇完全:
>>> parser.parse_args("--module geo metro".split())
usage: [-h] [--modules [{geo,loc} [{geo,loc} ...]]]
: error: argument --modules: invalid choice: 'metro' (choose from 'geo', 'loc')
PS C:\Users\myname\mycode>
我的問題是兩摺疊:
- 這是預期的行爲?如果是這樣,這是什麼原因?
- 使用這段代碼我會好嗎,因爲我不介意我的程序是否死於錯誤的參數?還是有一些令人信服的理由來避免這種情況?
作爲一個說明,我使用的Windows 7
'parser_args'調用一些調用'sys.exit'的'error'函數。這就是你得到這種行爲的原因。 – mmgp 2013-02-21 23:19:18