Vokabeltrainer

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

Craven hat geschrieben:Was genau ist da der Vorteil gegenüber meinem, bzw macht das nen Unterschied :?:
Hi Craven,

try-except ist die Narkosehammervariante und sollte als letztes verwendet werden. Mit der erschlägst Du vielleicht nicht unbedingt nur Deine Exception, sondern auch die von ihr abgeleiteten - und nachher fragt man sich: warum funktioniert das nicht und meldet nix mehr? In der Regel würde ich also eine Abfrage vorziehen.

Übrigens sollte eine einfache nonzero-Abfrage reichen:

Code: Alles auswählen

if dictionary:
    rightanswer = dictonary.popitem()
Grüße,
der Michel
Diese Nachricht zersört sich in 5 Sekunden selbst ...
BlackJack

Das ist aber Ansichtssache. In diesem Fall kann man davon ausgehen das es eine Ausnahme ist wenn das Dictionary leer ist, da kann man auch eine Ausnahme benutzen. Es wird ja auch nicht irgendeine Ausnahme behandelt, sondern die für diese Situation spezifische.
Nirven
User
Beiträge: 130
Registriert: Mittwoch 10. Mai 2006, 08:18
Wohnort: Bremerhaven

Mag in diesem speziellen Fall zutreffen. Aber in etwas komplexerem Code könnte ein keyError auch woanders herkommen. Allgemein ist also 'if dictionary' vorzuziehen, oder?

Hab mir auch schon Gedanken gemacht, ob ich an einer Stelle lieber eine Variable abfrage oder ein try benutze. Michael hat mich glaub ich davon überzeugt, try immer als letzte Methode zu benutzen, sonst gewöhn ich mir nur was "gefährliches" an.
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

so ähnlich verhält sich

Code: Alles auswählen

if my_var in my_dic:
    #tue was zu tun ist
else:
    #tue, was sonst in dert except stünde
http://www.cs.unm.edu/~dlchao/flake/doom/
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

murph hat geschrieben:so ähnlich verhält sich

Code: Alles auswählen

if my_var in my_dic:
    #tue was zu tun ist
else:
    #tue, was sonst in dert except stünde
Hi Murph,

geht es hier nicht darum, das Dictionary nach und nach zu leeren? Dann kann man doch nur prüfen, ob es leer ist bzw. ob es Elemente enthält. Denn man hat ja keinen Wert my_var, dessen Vorhandensein man prüfen könnte. :-)

Grüße,
Michael
Diese Nachricht zersört sich in 5 Sekunden selbst ...
BlackJack

Nirven hat geschrieben:Mag in diesem speziellen Fall zutreffen. Aber in etwas komplexerem Code könnte ein keyError auch woanders herkommen. Allgemein ist also 'if dictionary' vorzuziehen, oder?
Allgemein ist keines von beiden vorzuziehen sondern man sollte im Einzelfall entscheiden was der Semantik besser entspricht. IMHO.

Wenn `dictionary` ein komplexeres Objekt ist, dann kann auch ``if dictionary`` aufgrund von Programmierfehlern `False` ergeben obwohl das nicht stimmt.

Letztendlich finde ich das Konstrukt mit dem `poptitem()` sowieso ein bischen fragwürdig. Viel klarer fände ich so etwas:

Code: Alles auswählen

tmp = vocabulary.items()
tmp.shuffle()

for language_a, language_b in tmp[:count]:
    answer = raw_input('please translate "%s": ' % language_a)
    if answer != language_b:
        print 'Uh no, it is "%s".' % language_b
    else:
        print 'Correct.'
Antworten