Python組み込み範囲関数と変数値

私はgetoptを使ってコマンドライン引数を抽出し、提供されている値を修飾してから、それらの値をループの制限として使用するスクリプトを書いています。コードの一部は次のとおりです。

try:
    start_pod, end_pod, topo_value = map(int, args)
except ValueError, error_msg:
    if 'invalid' in str(error_msg):
        err_funct('Non-integer values supplied: {%s}' % args)
    else:
        err_funct(error_msg)

for pod in range(start_pod, end_pod):
    print 'value of pod: %s' % pod
    for switch in range(1,5):
        print 'value of switch: %s' % switch

私が抱えている問題は、「レンジ」機能です。私は整数を渡していると思います(マップ関数は文字列のリストを整数に変換しています)。もし私がtry/exceptハンドラではなく、私が書いたエラー関数を使って終了したのですが、何らかの理由でこれが動作しません。

私が正しい数の入力でスクリプトを呼び出すと、 'some_script.py 1 1 5'、スクリプトは何も返しません。

0

2 答え

スクリプトの呼び出しが間違っています:

>>> range(1,1)
[]

start_podend_pod は両方とも1になります)。

range(i、j)関数は、以下のリスト [i、i + 1、..、j-1] を返します。または、別の言い方をすると、終点は常に削除されます。

範囲内のポッドの ... 行を変更してみてください:

for pod in range(start_pod, end_pod + 1):
2
追加された

自己完結型の例を貼り付けることを確認してください。あなたは明らかに重要な部分を欠いています - argsは何に設定されていますか?

あなたが与えた例があなたのargsにまっすぐ写っていると仮定して、上に追加すると、

args = ['1', '1', '5']

あなたはちょうど言ったように動作します - 出力はありません。

しかし、それはおそらくあなたが望むものではないでしょう。なぜなら、start_podとend_podは同じであるからです。

代わりに私がしたら

args = ['1', '5', '1']

それから私は出力を得る。どのargが指定されたコマンドラインであなたのコードに到達していますか(そのブロックの直前のコードでrepr(args)を出力します)、それからどのような出力を期待していますか?

1
追加された