web-dev-qa-db-ja.com

TypeError:__init __()は、argparseで予期しないキーワード引数 'type'を取得しました

ちょっとですので、私は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

それがなぜなのか分かりません。誰もがこれにいくつかの光を当ててください。

22
Big_VAA

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'を同時に指定することはできません。

27
Sebastian

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 =エラーメッセージを発行しているサブクラス定義。

4
hpaulj