0

私のコードは、リストから名前に値を割り当てています。リストに名前の1つに割り当てるエントリがない場合に、デフォルト値を取得または設定する方法を知る必要があります。これまでの私のコード:

array =[[a],[b],[c],[d]]
no1 = array[0]
no2 =array[1]
no3 =array[2]
no4 =array[3]
# if array[4] exists:
    no5 = array[4]
else
    no5 = 0

私は試した-

try:
    array[4]
except ValueError:
    no5 = 0

しかし、それは範囲外のarray[4]として現れました。

明確にするために、私のコードの記述は見事ではないので、基本的に、これらの入力を読み取ってから出力をファイルに書き込む必要があるプログラムに対して、3つの異なる入力が与えられています。問題は、すべての入力の配列の長さが異なることです。だから私がやろうとしているのは、どういうわけかプログラムに(たとえば)array [4]のエントリがあるかどうかをチェックさせ、そのエントリが存在しない場合は、エントリarray[4]を作成してゼロに等しくすることです。

4

5 に答える 5

1

行ったことtry/exceptいいですね。が得られた場合IndexError、あなたは本当に近いです。あなたは間違ったタイプのエラーをexcept. これはうまくいったでしょう:

try:
    no5 = array[4]
except IndexError:
    no5 = 0
于 2012-11-16T16:45:22.497 に答える
1

ではなく、キャッチする必要がありますIndexError(によって発生した実際のエラー) 。array[4]ValueError

于 2012-11-16T16:45:28.407 に答える
0

間違った例外タイプをキャッチしようとしています

try:
    no5 = array[4]
except IndexError:
    no5 = 0

このための気の利いたワンラインソリューションは、itertools

import itertools
(no1,no2,no3,no4,no5),_ = zip(*itertools.izip_longest(array[:5],range(5),fillvalue=0))
于 2012-11-16T16:49:21.707 に答える
0

次のようなものではないのはなぜですか?

if len(array) > 4:
    no5 = array[4]
else:
    no5 = 0
于 2012-11-16T16:50:48.233 に答える
0

代わりにtry、配列の長さを確認することもできます

def: elem_exists(arr, idx):
   return 0 <= ldx < len(arr)
于 2012-11-16T16:48:14.743 に答える