电竞比分网-中国电竞赛事及体育赛事平台

分享

python - 使 argparse 對待破折號和下劃線相同

 LibraryPKU 2024-06-17 發(fā)布于北京

argparse 用下劃線替換可選參數中的破折號以確定它們的目的地:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--use-unicorns', action='store_true')
args = parser.parse_args(['--use-unicorns'])print(args)  # returns: Namespace(use_unicorns=True)

但是用戶必須記住選項是--use-unicorns還是--use_unicorns;使用錯誤的變體會引發(fā)錯誤。

這可能會導致一些挫折,因為代碼中的變量 args.use_unicorns 沒有明確定義了哪個變體。

如何讓 argparse 接受 --use-unicorns--use_unicorns 作為定義這個可選參數的有效方式?

最佳答案

parser.add_argument('--use-unicorns', action='store_true')
args = parser.parse_args(['--use-unicorns'])print(args)  # returns: Namespace(use_unicorns=True)

argparse 將“-”轉換為“_”,因為在標志中使用“-”是公認的 POSIX 慣例。但是 args.use-unicones 不是  Python 可接受的。換句話說,它進行翻譯,因此 dest 將是有效的  Python 變量或屬性名稱。

請注意,argparse 不會使用 positionals 執(zhí)行此轉換。在那種情況下,程序員可以完全控制 dest 參數,并且可以選擇任何方便的東西。由于 argparse 在訪問 Namespace 時僅使用 getattrsetattr,因此對有效 dest 的約束 是最小的。

有兩個用戶。有你,程序員,有你的最終用戶。對您來說方便的可能對其他人來說不是最佳的。

您還可以通過定義optional 來指定destmetavar 使您可以進一步控制幫助 顯示。


執(zhí)行“-”替換的是 parser._get_optional_kwargs:

    if dest is None:
        ....
        dest = dest.replace('-', '_')

關于 python - 使 argparse 對待破折號和下劃線相同,我們在Stack Overflow上找到一個類似的問題: https:///questions/53527387/

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多