Seite 1 von 1
Was wiedergeben wenn funktion fehlschlägt?
Verfasst: Dienstag 6. April 2010, 12:13
von INFACT
Hey,
Ich habe eine Funktion die eine Liste returnd, aber diese funktion funktioniert nicht immer. Also, wenn die funktioniert gibt die mir eine Liste wieder, aber was soll ich machen, wenn die nicht funtkioniert. Soll ich mir dann eine Leere liste wiedergeben lassen, oder einfach einen bool?
Verfasst: Dienstag 6. April 2010, 12:15
von CM
Das hängt ganz klar davon ab, was Du wie erreichen willst.
Sag' mal, meinst Du nicht, das diese Frage reichlich unspezifisch ist?

Oft ist es sinnvoll, wenn Funktionen immer die selbe Zahl von Rückgabeelementen (im Tuple) und dieselben Rückgabetypen haben. Aber u. U. eben nicht.
Verfasst: Dienstag 6. April 2010, 12:19
von INFACT
CM hat geschrieben:Das hängt ganz klar davon ab, was Du wie erreichen willst.
Sag' mal, meinst Du nicht, das diese Frage reichlich unspezifisch ist?

Oft ist es sinnvoll, wenn Funktionen immer die selbe Zahl von Rückgabeelementen (im Tuple) und dieselben Rückgabetypen haben. Aber u. U. eben nicht.
Naja ich weiß es eben nicht. Ich will ein Client Server programm schreiben, bei dem Der client eine Anfrage stellt und der Server mit "hat geklappt" und den Rückgabewerten antwortet. Wenn es aber nicht klappt, gibt es auch keine Rückgabewerte. Wenn die liste elemente hat, dann kommt sowas dabei raus:
Also weiß ich nicht wie ich das anstellen soll
Re: Was wiedergeben wenn funktion fehlschlägt?
Verfasst: Dienstag 6. April 2010, 12:20
von /me
INFACT hat geschrieben:Ich habe eine Funktion die eine Liste returnd, aber diese funktion funktioniert nicht immer. Also, wenn die funktioniert gibt die mir eine Liste wieder, aber was soll ich machen, wenn die nicht funtkioniert. Soll ich mir dann eine Leere liste wiedergeben lassen, oder einfach einen bool?
Das hängt davon ab, ob eine leere Liste für die Weiterverarbeitung in Ordnung ist. Wenn nicht, dann würde ich gar nichts zurückgeben sondern eine Exception werfen.
Re: Was wiedergeben wenn funktion fehlschlägt?
Verfasst: Dienstag 6. April 2010, 12:26
von INFACT
/me hat geschrieben:INFACT hat geschrieben:Ich habe eine Funktion die eine Liste returnd, aber diese funktion funktioniert nicht immer. Also, wenn die funktioniert gibt die mir eine Liste wieder, aber was soll ich machen, wenn die nicht funtkioniert. Soll ich mir dann eine Leere liste wiedergeben lassen, oder einfach einen bool?
Das hängt davon ab, ob eine leere Liste für die Weiterverarbeitung in Ordnung ist. Wenn nicht, dann würde ich gar nichts zurückgeben sondern eine Exception werfen.
Ich glaube ich habe mich für die leere Liste entschieden, dann kann ich mit if überprüfen ob der Rückgabewert die richtige länge hat.
Verfasst: Dienstag 6. April 2010, 12:39
von BlackJack
@INFACT: Das kannst Du dann aber auch vergessen -- absichtlich oder unabsichtlich. Um Ausnahmen *muss* man sich kümmern. Irgendwelche speziellen Rückgabewerte bei Fehlern sind in der Regel unpraktisch.
Verfasst: Dienstag 6. April 2010, 12:53
von INFACT
BlackJack hat geschrieben:@INFACT: Das kannst Du dann aber auch vergessen -- absichtlich oder unabsichtlich. Um Ausnahmen *muss* man sich kümmern. Irgendwelche speziellen Rückgabewerte bei Fehlern sind in der Regel unpraktisch.
Aber wenn ich dass versuche gibt mir das sowieso einen Fehler:
Verfasst: Dienstag 6. April 2010, 13:22
von BlackJack
@INFACT: Erstens gibt das einen Fehler an einer anderen Stelle und nicht da wo er im Quelltext da erste mal bemerkt wurde, und zweitens kann man mit Listen ja auch noch andere Sachen machen, die keinen Fehler provozieren sondern eventuell nur falsches Verhalten des Programms.
Verfasst: Dienstag 6. April 2010, 13:28
von INFACT
BlackJack hat geschrieben:@INFACT: Erstens gibt das einen Fehler an einer anderen Stelle und nicht da wo er im Quelltext da erste mal bemerkt wurde, und zweitens kann man mit Listen ja auch noch andere Sachen machen, die keinen Fehler provozieren sondern eventuell nur falsches Verhalten des Programms.
Hmm... überredet

Verfasst: Dienstag 6. April 2010, 14:15
von dahaze
Da das Ganze eine Client-Server-Anwendung werden soll fände ich es sinnvoll clientseitig dann auch ein paar Informationen zu erhalten was nicht funktioniert hat. Deshalb würde ich generell das erste Listenelement als Statustext o.Ä. benutzen und dann Clientseitig auswerten. So alla:
Code: Alles auswählen
>>> def server_func(l):
... result = [None]
... try:
... for item in l:
... result.append(item/2.0)
... except:
... result[0] = 'Fehler bei der Berechnung!'
...
... return result
...
>>> def client_func(elemente):
... ergebnis = server_func(elemente)
... if ergebnis[0]:
... print 'Das war nix!\nGrund: %s\nBerechnete Werte:' % ergebnis[0], ergebnis[1:]
... else:
... print 'Ergebnis: ' , ergebnis[1:]
...
>>> client_func([1,2,3,4])
Ergebnis: [0.5, 1.0, 1.5, 2.0]
>>> client_func([1,2,3,4,'a',5,6])
Das war nix!
Grund: Fehler bei der Berechnung!
Berechnete Werte: [0.5, 1.0, 1.5, 2.0]
>>>
Ob du dann den zurueckgegeben Text ausgibst bzw. weiterverarbeitest oder einfach nur "if ergebnis[0]" prüfst bleibt dann dir überlassen.
Verfasst: Dienstag 6. April 2010, 14:21
von BlackJack
Himmel noch eins: Genau um solchen fehlerträchtigen Mist nicht machen zu müssen wurden Ausnahmen erfunden!

Verfasst: Dienstag 6. April 2010, 14:36
von dahaze
Natürlich ist ein "blankes":
sehr schlecht da man den Grund für die Exception wegbügelt. Das muss sicher noch ausgebaut werden.
Aber eine serverseitig nicht abgefangene Exception ist doch noch gravierender!?
Es ging mir hauptsächlich auch um die zurückgegebene Liste....