Fehlende Keys überspringen

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
halo23
User
Beiträge: 20
Registriert: Freitag 30. Oktober 2009, 08:01

Hallo,
ich habe folgendes Konstrukt:

Code: Alles auswählen

[...]('uid=xyz', {'apple-generateduid': ['xyz'], 'loginShell': ['xyz'], 'uid': ['xyz'], 'cn': ['xyz']})
('uid=xyz', {'apple-generateduid': ['xyz'], 'loginShell': ['xyz'], 'telephoneNumber': ['157'], 'uid': ['xyz'], 'cn': ['xyz']})[...]
Ich habe also manchmal eine Telfonnummer und manchmal keine.

Code: Alles auswählen

for result in results:
        (a, b) = result
        name = b['cn'][0]
        uid = b['uid'][0]
        guid = b['apple-generateduid'][0]
        tel = b['telephoneNumber'][0]
        shell = b['loginShell'][0]
Mein Skript gibt mir folgende Fehlermeldung:

Code: Alles auswählen

[...]
tel = b['telephoneNumber'][0]
KeyError: 'telephoneNumber'
Wie "überrede" ich nun mein Skript dazu, nicht abzubrechen falls es keine telefonnummer gibt?!
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

halo23 hat geschrieben:Wie "überrede" ich nun mein Skript dazu, nicht abzubrechen falls es keine telefonnummer gibt?!
Ich nehme mal an, dass du es in der Dokumentation überlesen hast. Schau einfach noch mal unter http://docs.python.org/tutorial/datastr ... ctionaries nach. Die Antwort steht da.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Code: Alles auswählen

try:
    # Zugriff auf Tel.
except KeyError:
    pass
    # oder anderer Code, z.B. Warnung ausgeben
Edit: @/me Also an der Stelle habe ich nichts zu Fehlerbehandlung gefunden.
Wenn, dann hier:
http://docs.python.org/tutorial/errors.html
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Oder eben alternativ:

Code: Alles auswählen

{}.get("foo", "bar")
wenn man denn irgend einen Wert haben möchte an der Stelle.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

ice2k3 hat geschrieben:@/me Also an der Stelle habe ich nichts zu Fehlerbehandlung gefunden.
Ich wollte erst mal auf das key in dict hinaus.
halo23
User
Beiträge: 20
Registriert: Freitag 30. Oktober 2009, 08:01

Danke, ich habe es nun mit ice2k3 art gemacht, unter http://docs.python.org/tutorial/datastr ... ctionaries habe ich keine Lösung finden können, bzw. habe es nicht verstanden.
Antworten