"try: - except:" mit mehrdimens. Dictionary

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
KorFreier
User
Beiträge: 8
Registriert: Freitag 16. Januar 2009, 17:14
Wohnort: Hamburg

Hallo Leute,

ich habe ein kleines Problem mit einem mehrdimensionalen Dictionary: Es führt den "try" Befehl nicht aus (siehe unten). Stattdessen bleibt der "int_value" in der Ausgabe immer "0".

Das Schema meines Problems sieht so aus (leider war es mir nicht möglich ein kleines Beispielprogramm zu schreiben, bei dem das gleiche Problem auftaucht):

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: cp1252 -*-


metacalc_out = {}
for density in densclass:
    option_out={}
    for option in optclass:
        run_out={}
        for run in ensrun:
            year_out={}
            for year in yearrun:
                parameter_out={}
                
                for parameter in outset2:
                    int_value = 0
                    for days in pinput[density][option][run][year]:
                        try: # nur wenn er den parameter findet, addiert er ihn
                            int_value = int_value + pinput[density][option][run][year][days][parameter]
                            print pinput[density][option][run][year][days][parameter]
                        except:
                            int_value = int_value + 0
                    parameter_out[parameter]=int_value
Ich würde als Ergebnis gerne haben, dass das Programm immer den Wert des Parameters aus "outset2" addiert, sofern es ihn in dem Sub-Dictionary pinput..[days] findet.

Wenn ich eingebe:

Code: Alles auswählen

pinput[density][option][run][year][98]['yld']
Dann gibts als Output

>> 0.1

Es gäbe also einen Wert für den gesuchten Parameter 'yld'. Warum addiert ihn das Programm nicht?

Hätte jemand eine Idee? :roll:

Würd mich sehr freuen und schon mal vielen Dank! :P

Korbinian


P.S: Vielleicht hilft es ja:
Ich hab ein Beispielprogramm, dass so aussieht, aber es funktioniert dort auch!! Wenn jemand den Unterschied findet, dann hätten wir gewonnen...

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: cp1252 -*-



outputset = ['b']

dict1 = {'erstes':{'day1':{'a':1,'b':1},'day2':{'a':1,'b':1}},
         'zweites':{'day1':{'a':1},'day2':{'a':1}}}

for element in outputset:
    key_out = {}
    for key in dict1:
        el_out = {}
        value = 0
        for day in dict1[key]:
            try: 
                value = value + dict1[key][day][element]
                print dict1[key][day][element]
            except:
                value=value
        el_out[element]=value
        key_out[key]=el_out 

print key_out
Zuletzt geändert von KorFreier am Mittwoch 22. April 2009, 12:14, insgesamt 3-mal geändert.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Du meinst wohl, dass er den try-Block nicht ausführt und nicht den try-Befehl. Genau solche Fehler provozierst du, wenn du ein except ohne eine konkrete Angabe der abzufangenden Fehlermeldungen machst. Es werden einfach ALLE Fehler verschluckt die auftreten. Wahrscheinlich gibt es einen IndexError den du einfach nicht zu sehen bekommst.
Das Leben ist wie ein Tennisball.
KorFreier
User
Beiträge: 8
Registriert: Freitag 16. Januar 2009, 17:14
Wohnort: Hamburg

Perfekt!

Vielen Dank! :D

Ich hab mit deinem Tipp aus dem...

Code: Alles auswählen

 except:
ein...

Code: Alles auswählen

except KeyError:
gemacht und jetzt bekomme ich die Fehlermelung, die mir sagt, woran es liegt (er konnte keinen string mit einem integer value addieren) .

Vielen Dank nochmals, ist nämlich echt schwierig rauszufinden, dass ein Fehler vorliegt, wenn man (mangels besserem Wissen) selbst den Fehler unterdrückt!
Antworten