2016-11-30 9 views
-1

私は以下のコードを実行し、food_quant = item[1]リストインデックスが範囲外であるというエラーを発生させます。 itemが実際にリストになっていて、両方のアイテムが正しく辞書に追加されていることを確認しました。問題は"Add"コマンドにあります。また、これは単なるスニペットなので、残りのプログラムは関係ないので、私は適切な辞書とリストをこの部分の上に定義しています。インデックスが範囲外ののはなぜですか? (Python)

item = input("Please enter an item with its quantity separated by a hyphen (Ex. Apples-3) or any of the commands described above.") 
    item = item.split('-') 
    food_item = item[0] 
    food_quant = item[1] 
    foodquant_dict[food_item] = food_quant 
    if item == "Add": 
     for key in foodquant_dict: 
      groceryfood_list.append(key) 
     print (groceryfood_list) 
+3

ユーザが「追加」を入力すると、item = item.split( ' - ') 'の後に' item'がいくつあると思いますか? – user2357112

+0

あなたの説明でエラーとして報告した行は、引用したコードのどこにも表示されません。あなたは 'food_quant = item [1]'を意味しましたか? –

+0

@ user2357112これは '['Apple'、 '3']' – tmp657

答えて

1

ハイフンに少なくとも含有していない任意の入力が(例えば、「追加」、または任意の入力が実際にハイフンを含まない)あなたのプログラムに与えられた場合、あなたのprogrmaがまだ存在しませんfood_quant = item[1]を設定しよう入力に少なくとも1つのハイフンが含まれていない場合(つまり、リストに何も分割されていない場合、そのアイテムはその1つのアイテムだけを含むリストになります)。

ポイントを説明するための例:

明らかに
>>> case1 = "item-2".split("-") 
>>> case1 
['item', '2'] 
>>> case2 = "item".split("-") 
>>> case2 
['item'] 

、リスト中のただ一つの要素があるので、後者の場合のためにcase2[1]を呼び出すと、IndexErrorを引き起こします。入力にダッシュが含まれているかどうかを検証するか、分割リストに複数の要素が含まれているかどうかを検証する必要があります。リストの長さを検証する例:

item = input("enter your input\n") 
item = item.split("-") 
if len(item) > 1: 
    a = item[1] 
+0

あなたは 'item = item.split(" - ")'あるいは 'item = input(...)を意味すると思います。split(" - ")' – Copperfield

関連する問題