Was wiedergeben wenn funktion fehlschlägt?

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
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

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?
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Das hängt ganz klar davon ab, was Du wie erreichen willst. :D

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.
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

CM hat geschrieben:Das hängt ganz klar davon ab, was Du wie erreichen willst. :D

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:

Code: Alles auswählen

>>> bool([])
False
>>> bool([False, False])
True
>>> 
Also weiß ich nicht wie ich das anstellen soll
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

/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.
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)
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.
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

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:

Code: Alles auswählen

[][1]
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)
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.
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

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 :wink:
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)
dahaze
User
Beiträge: 75
Registriert: Freitag 13. März 2009, 10:57
Wohnort: im Schwabenland

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.
Zuletzt geändert von dahaze am Dienstag 6. April 2010, 14:25, insgesamt 1-mal geändert.
BlackJack

Himmel noch eins: Genau um solchen fehlerträchtigen Mist nicht machen zu müssen wurden Ausnahmen erfunden! :roll:
dahaze
User
Beiträge: 75
Registriert: Freitag 13. März 2009, 10:57
Wohnort: im Schwabenland

Natürlich ist ein "blankes":

Code: Alles auswählen

try:
pass
except:
pass
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....
Antworten