ちょっとですので、私はargparseを使用して四半期レポートを作成しようとしています。コードは次のようになります。
parser = argparse.ArgumentParser()
parser.add_argument('-q', "--quarter", action='store_true', type=int, help="Enter a Quarter number: 1,2,3, or 4 ")
parser.add_argument('-y', "--year", action='store_true',type=str,help="Enter a year in the format YYYY ")
args = parser.parse_args()
私が受け取るエラーは次のとおりです。
TypeError:init()に予期しないキーワード引数 'type'がありました
argparseのドキュメントタイプからわかる限り、add_argument関数のパラメーターの1つです。私はこれを削除してコードを更新しようとしました:
parser = argparse.ArgumentParser()
parser.add_argument('-q', "--quarter", action='store_true', help="Enter a Quarter number: 1,2,3, or 4 ")
parser.add_argument('-y', "--year", action='store_true',help="Enter a year in the format YYYY ")
args = parser.parse_args()
私はそれからそれを実行しようとしました:python scriptname.py -q 1 -y 2015
そして、それは私に次のエラーを与えています:
エラー:認識できない引数:1 2015
それがなぜなのか分かりません。誰もがこれにいくつかの光を当ててください。
action="store_true"
が意味することは、引数がコマンドラインで指定された場合、True
値がパーサーに保存されることです。実際に必要なのは、指定された年(文字列)と四半期(int)を格納することです。
parser = argparse.ArgumentParser()
parser.add_argument('-q', "--quarter", type=int, help="Enter a Quarter number: 1,2,3, or 4 ")
parser.add_argument('-y', "--year", type=str, help="Enter a year in the format YYYY ")
args = parser.parse_args()
action='store_true
を指定すると、argparseは、type
パラメータを受け入れないコンストラクタを持つ_StoreAction
インスタンスを内部的にインスタンス化します(常にブール値(True/False)になるため)。 action="store_true"
と 'type'を同時に指定することはできません。
argparse
のドキュメントは、それほど詳細ではありません(ただし、多くのユーザーが吸収できる以上の情報が残っています)。
特に、引数に必要な実際の情報はaction
によって異なります。
parser.add_argument('-q', "--quarter", action='store_true', type=int, help="Enter a Quarter number: 1,2,3, or 4 ")
store_true
アクションはパラメータを取りません(つまり、args = 0)。デフォルト値はFalse
で、使用する場合、属性はTrue
に設定されます。
ユーザーにこれらの4つの番号のいずれかを提供する場合は、使用することをお勧めします
parser.add_argument('-q', '--quarter', type=int, choices=[1,2,3,4], help="...")
https://docs.python.org/3/library/argparse.html#choices にも同様の例があります。
https://docs.python.org/3/library/argparse.html#action の例は、各アクションクラスが取るパラメーターのかなり良いアイデアを提供します。
Pythonバグ/問題、ドキュメントの改善、または関数に不要なパラメーターが指定されている場合のエラーメッセージについて説明しています。現状では、Python =エラーメッセージを発行しているサブクラス定義。