Seite 1 von 1

Test auf Existenz / Extrem nervige Exceptions

Verfasst: Freitag 29. Januar 2016, 18:59
von Gondii
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.

Re: Test auf Existenz / Extrem nervige Exceptions

Verfasst: Freitag 29. Januar 2016, 19:24
von Dav1d
`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]

Re: Test auf Existenz / Extrem nervige Exceptions

Verfasst: Freitag 29. Januar 2016, 19:31
von nezzcarth
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.

Re: Test auf Existenz / Extrem nervige Exceptions

Verfasst: Freitag 29. Januar 2016, 20:44
von 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.

Re: Test auf Existenz / Extrem nervige Exceptions

Verfasst: Freitag 29. Januar 2016, 20:51
von /me
Gondii hat geschrieben:Das nervt!!!
Es nervt aber auch wenn sich jemand über angeblich nicht vorhandene Sprachfeatures beschwert die es aber gibt.