Test auf Existenz / Extrem nervige Exceptions

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
Gondii
User
Beiträge: 24
Registriert: Freitag 11. September 2015, 05:56

Hallo Leute,

Ich bin momentan etwas genervt von Python, weil es Exceptions raus haut, die ich nicht haben will. Und den Frust darüber muss ich hier mal grad kund tun...

Warum testet IF nur Bedingungen und nicht die Existenz?

Ich möchte gerne sowas schreiben können:

Code: Alles auswählen

if name:
	#do something
und sowas wäre auch echt cool:

Code: Alles auswählen

if kwargs['name']:
	#do something
oder

Code: Alles auswählen

if mylist[index]:
	#do something
Und ich möchte nicht bei jeder dieser Tests einen NameError bekommen, wenn name nicht existiert. Deswegen steht ja IF davor, weil ich nur dann etwas tun will, falls name existiert. Das nervt!!!
Wie soll ich denn sonst testen, ob der name in kwargs enthalten ist? Jedes mal try und except zu definieren find ich ziemlich nervig, zumal ich nicht definieren will, was passiert wenn name nicht existiert (except). Das interessiert mich in dem Moment nicht.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

`if name` macht keinen Sinn, kann man aber theoretisch auch machen (wills dir nicht zeigen, sowas ist 99.9999999999% unnötig und falsch).

Code: Alles auswählen

if 'name' in kwargs:
    print kwargs['name']

if index < len(mylist):
    print mylist[index]
the more they change the more they stay the same
nezzcarth
User
Beiträge: 1634
Registriert: Samstag 16. April 2011, 12:47

Die Frage ist mit so abstrakten Beispielen nicht klar zu beantworten. Was du als nervig empfindest, ist eigentlich ganz bewusst so und eine Stärke von Python (https://docs.python.org/2/glossary.html#term-eafp). Die vorherige Prüfung mittels if ist in Python eher unüblich. Man handelt das umittelbar über Exceptions ab. Und wenn du den Except-Teil nicht haben möchtest, schreibst du halt pass hin.

Und für den Sonderfall mit den Dictionaries kann man übrigens noch deren get-Methode verwenden.
BlackJack

@Gondii: Namen sollten schlicht und einfach existieren. Wenn Du ständig Probleme dieser Art hast, dann machst Du etwas grundlegend falsch.

Edit: Um es noch einmal zu verdeutlichen:

Code: Alles auswählen

try:
    name
except NameError:
    pass
else:
    do_something_with(name)
Ist nicht nur nervig zu schreiben, sondern ein Muster das man dadurch umgeht in dem man gar nicht erst in so eine merkwürdige Situation kommt. `name` hat gefälligst zu existieren wenn man es (potentiell) verwendet. Alles andere führt zu Code bei dem man beim Lesen nicht sicher ist wann welcher Name existiert und wann das in Ordnung ist und wann es ein Programmierfehler ist. Ein nicht existierender Name sollte eigentlich immer ein Programmierfehler sein. Und die sollte man im Quelltext beseitigen und nicht mit ignorierender Ausnahmebehandlung umgehen.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Gondii hat geschrieben:Das nervt!!!
Es nervt aber auch wenn sich jemand über angeblich nicht vorhandene Sprachfeatures beschwert die es aber gibt.
Antworten