1. ホーム
  2. python

[解決済み] sys.argv[x]が定義されているかどうかをチェックする

2022-06-30 12:42:37

質問

変数がスクリプトに渡されたかどうかを確認する最善の方法は何でしょうか。

try:
    sys.argv[1]
except NameError:
    startingpoint = 'blah'
else:
    startingpoint = sys.argv[1]

どのように解決するのですか?

結局のところ try, except とテストするのと len(sys.argv) はそれほど重要ではありません。どちらも argparse .

これは、低予算のargparseのようなものとして、私に思い浮かびました。

arg_names = ['command', 'x', 'y', 'operation', 'option']
args = dict(zip(arg_names, sys.argv))

を生成するために使うこともできます。 namedtuple にデフォルトで設定されている値で None -- のような値で構成されています。

Arg_list = collections.namedtuple('Arg_list', arg_names)
args = Arg_list(*(args.get(arg, None) for arg in arg_names))

をよく知らない人のために namedtuple これはオブジェクトのように振る舞うタプルで、その値にアクセスするために tup.attribute 構文の代わりに tup[0] の構文に置き換えます。

つまり、最初の行は新しい namedtuple の各値に対応する値を持つ arg_names . 2行目は args 辞書の値を渡します。 get を使って、与えられた引数名が辞書に関連する値を持っていない場合にデフォルト値を返すようにしています。