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