將 optparse
程式碼遷移到 argparse
¶
argparse
模組提供了 optparse
模組不原生提供的幾個高階功能,包括
處理位置引數。
支援子命令。
允許使用替代選項字首,例如
+
和/
。處理零個或多個以及一個或多個樣式的引數。
生成資訊更豐富的用法訊息。
為自定義
type
和action
提供更簡單的介面。
最初,argparse
模組試圖保持與 optparse
的相容性。然而,支援宣告式命令列選項處理(同時將位置引數處理留給應用程式程式碼)與在宣告式介面中同時支援命名選項和位置引數之間的根本設計差異意味著其 API 隨著時間的推移與 optparse
的 API 產生了分歧。
如 選擇一個引數解析庫 中所述,目前正在使用 optparse
並且對其工作方式滿意的應用程式可以繼續使用 optparse
。
考慮遷移的應用程式開發人員在決定是否需要遷移之前,還應查閱該部分描述的內在行為差異列表。
對於選擇從 optparse
遷移到 argparse
的應用程式,以下建議應該有所幫助
將所有
optparse.OptionParser.add_option()
呼叫替換為ArgumentParser.add_argument()
呼叫。將
(options, args) = parser.parse_args()
替換為args = parser.parse_args()
併為位置引數新增額外的ArgumentParser.add_argument()
呼叫。請記住,以前稱為options
的內容,現在在argparse
環境中稱為args
。透過使用
parse_intermixed_args()
而不是parse_args()
來替換optparse.OptionParser.disable_interspersed_args()
。將回調動作和
callback_*
關鍵字引數替換為type
或action
引數。將
type
關鍵字引數的字串名稱替換為相應的型別物件(例如 int, float, complex 等)。將
optparse.Values
替換為Namespace
,並將optparse.OptionError
和optparse.OptionValueError
替換為ArgumentError
。將帶有隱式引數(例如
%default
或%prog
)的字串替換為使用字典格式化字串的標準 Python 語法,即%(default)s
和%(prog)s
。將 OptionParser 建構函式的
version
引數替換為呼叫parser.add_argument('--version', action='version', version='<the version>')
。