2016-07-18 15 views
1

私は倉庫とのインターフェースとして、私の人生を楽にする小さなスクリプトを書こうとしています。達成しなければならない製品のさまざまなスタイル、サイズ、色、およびUPCコードを使用してシンプルなcsvファイルをエクスポートできるようにしたいと思っています。ここで私が作成した辞書からUPCコードを取得を扱うコードの一部です:文字列インデックスは、strではなく整数でなければなりません - Pythonスクリプト

UPC = {'True Premium Flat': {'White': {'6':'994000000446','7':'994000000453','8':'994000000460','9':'994000000477','10':'994000000484','11':'994000000491','12':'994000000507'}, 
          'Silver': {'6':'994000000514','7':'994000000521','8':'994000000538','9':'994000000545','10':'994000000552','11':'994000000569','12':'994000000576'}, 
          'Champagne': {'6':'994000000309','7':'994000000316','8':'994000000323','9':'994000000330','10':'994000000347','11':'994000000354','12':'994000000361'}, 
          'Black': {'6':'994000000378','7':'994000000385','8':'994000000392','9':'994000000408','10':'994000000415','11':'994000000422','12':'994000000439'} 
          }, 
     'Classic Flat': {'Black': {'Small':'994000000279','Medium':'994000000286','Large':'994000000293'}, 
         'Champagne': {'Small':'994000000248','Medium':'994000000255','Large':'994000000262'}, 
         } 
     } 

def UPCget(St, C, Si): 
    return UPC[St][C][Si] 

LineNum = raw_input('How many different items are returning? ') 
Style = raw_input('Style? C or P: ') 
if Style == 'C' or Style == 'c': 
    Style = 'Classic Flat' 
if Style == 'P' or Style == 'p': 
    Style = 'True Premium Flat' 
LineNum = int(LineNum) 
for num in range(LineNum): 
    item = num + 1 
    print('\nItem number ' + str(item)) 
    Color = raw_input('Color: ') 
    Size = raw_input('Size: ') 
    UPC = UPCget(Style, Color, Size) 
    print Color + ', Size ' + Size + ' has UPC code ' + UPC 
f.close() 

しかし、私は入れません私のLINENUMが1よりも大きい場合にのみエラー「文字列のインデックスを整数ではなく、STRでなければなりません」 、そして2回目の出現時にのみ。 私はデバッガを見てきましたが、UPCgetを初めてVSを2回目に呼び出すときには違いがないようです。

助けていただければ幸いです!

EDIT:

はトラックバックを投稿する忘れ:)

How many different items are returning? 2 
Style? C or P: P 

Item number 1 
Color: Silver 
Size: 7 
Silver, Size 7 has UPC code 994000000521 

Item number 2 
Color: Champagne 
Size: 7 

Traceback (most recent call last): 
    File "/Users/klhuizinga/Documents/Talaria/ASN/UPCget.py", line 26, in <module> 
    UPC = UPCget(Style, Color, Size) 
    File "/Users/klhuizinga/Documents/Talaria/ASN/UPCget.py", line 12, in UPCget 
    return UPC[St][C][Si] 
TypeError: string indices must be integers, not str 
+0

エラーが報告された行と完全なトレースバックを指定してください。 'return'ステートメントは明白な候補です。 – cdarke

+0

完全なトレースバックとは何ですか? –

+0

'UPCget'関数でグローバル変数を使用せず、UPCディクショナリを引数として渡すことを検討するかもしれません。 –

答えて

6
UPC = UPCget(Style, Color, Size) 

をここに問題があります。 UPCgetはループの最初の反復で正常に動作しますが、その後はUPCが上書きされます。これはもはや辞書ではなく、今や文字列です。それで、2回目の反復では、UPCgetのように文字列をインデックスできないので失敗します。

異なる変数名を使用して、元の値を上書きしないようにしてください。

code = UPCget(Style, Color, Size) 
print Color + ', Size ' + Size + ' has UPC code ' + code 
+0

Omg私はそれらに同じ名前を付けたことに気が付きませんでした!ドイ!スーパーはそれを感謝し、10億回以上壁に向かって頭を叩いたでしょう。 – klhui

関連する問題