2011-10-28 16 views
0

私はgetoptを使ってコマンドライン引数を抽出し、提供された値を修飾し、その値をループの制限として使うスクリプトを書いています。コードの一部は次のとおりです。Python組み込みの範囲関数と変数の値

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'、スクリプトは何も返しません。

答えて

2

スクリプトのあなたの呼び出しが正しくありません:

>>> range(1,1) 
[] 

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

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

はでfor pod in range...ラインを変更してみてください:

for pod in range(start_pod, end_pod + 1): 
1

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

私は単純にあなたがまっすぐにあなたの引数にマップを与え、最上部に追加の例と仮定した場合:あなただけ言っていないよう

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

が、それは動作します - 何も出力します。

しかし、start_podとend_podが同じであるため、これはおそらく必要ではありません。

代わりに私はその後、私は出力を得る

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

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

関連する問題