2016-07-18 15 views
1

Der Versuch, ein kleines Skript zu schreiben, um mein Leben einfacher zu machen, wie ich mit dem Lagerhaus verbinden. Ich möchte etwas erstellen, mit dem ich eine einfache CSV-Datei mit all den verschiedenen Stilen, Größen, Farben und UPC-Codes der Produkte exportieren kann, die ich erfüllen muss. Hier ist ein Teil des Codes, der mit immer den UPC-Codes aus dem Wörterbuch beschäftigt I erstellt:String-Indizes müssen Ganzzahlen sein, nicht str - Python-Skript

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() 

Aber ich halte einen immer ‚String-Indizes muß ganze Zahlen sein, nicht str‘ Fehler nur, wenn mein LineNum größer als 1 sind und nur beim zweiten Vorkommen. Ich habe mir den Debugger angesehen, kann aber keinen Unterschied zwischen dem ersten Aufruf von UPCget beim zweiten Mal finden.

Würde mich über Hilfe freuen!

EDIT:

vergessen Trackbacks posten :)

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

Bitte geben Sie an, für welche Zeile der Fehler gemeldet wird, und die vollständige Rückverfolgung. Die Rückkehranweisung ist ein offensichtlicher Kandidat. – cdarke

+0

Was ist der vollständige Traceback? –

+0

Sie könnten erwägen, keine globale Variable in Ihrer 'UPCget'-Funktion zu verwenden und das UPC-Dictionary als Argument zu übergeben. –

Antwort

6
UPC = UPCget(Style, Color, Size) 

Hier ist das Problem. UPCget funktioniert in der ersten Iteration Ihrer Schleife, aber dann wird UPC überschrieben. Es ist kein Diktat mehr, jetzt ist es eine Zeichenfolge. Dann schlägt es in der zweiten Iteration fehl, weil Sie einen String nicht so indizieren können, wie es UPCget tut.

Versuchen Sie, einen anderen Variablennamen zu verwenden, damit Sie den ursprünglichen Wert nicht überschreiben.

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

Omg Ich habe nicht einmal bemerkt, dass ich ihnen das gleiche Ding nenne! Doi! Super schätze es, hätte meinen Kopf noch eine Milliarde mehr gegen die Wand geschlagen. – klhui

Verwandte Themen