Format für mehrere Ergebnisse einer Funktion...

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
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 10. Februar 2005, 14:22

Ich hab eine Funktion, die mehr als True/False zurück geben kann/soll...

Ich mache mir gerade gedanken über das Format, wie ich die Information zurück geben und Auswerten soll...

Meine Variante:

Code: Alles auswählen

def beispiel():
    if...
        return True
    elif...
        return "Fehler, weil blabla"
    elif...
        return "Fehler, weil was anderes"
    else
        return "Fehler, weil ich weiß auch nicht"
Also bei True ist alles in Ordnung, Ansonten der Fehler-Text...
Oder sollte ich vielleicht PythonLike mit raise "FehlerTexte" arbeiten???

Sonstige Anregungen?
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 10. Februar 2005, 14:54

Ich würde raise nehmen, aber nicht Texte raisen, sondern Python Objekte die von Exception geerbt haben.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 10. Februar 2005, 15:11

Kannst du mal ein kleines Beispiel geben...

Das mit dem Text hat vor und nachteile... Ich kann einfach sagen

Code: Alles auswählen

if result!=True: print "Fehler:", result
Aber wenn ich genauer abfragen will, welcher Fehler es denn nun war, muß ich den String genau abfragen, was ziemlich doof ist...
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Donnerstag 10. Februar 2005, 15:35

Hi jens,

ich würd mir auch die Exceptions und das Handling mal genauer anschauen. http://www.python.org/doc/2.4/tut/node10.html

Code: Alles auswählen

class EigenerError(Exception):
    def __init__(self, msg):
        self.msg = msg
    
    def __repr__(self)
        return repr(self.msg)


def beispiel():
    if...
        return True
    elif...
        raise TypeError("Fehler, weil blabla")
    elif...
        raise ValueError("Fehler, weil was anderes")
    else
        raise EigenerError("Fehler, weil ich weiß auch nicht")

try:
    result = beispiel()
except EigenerError, e:
    print "Achtung '%s' ist aufgetreten!" % e.msg
Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
BlackJack

Donnerstag 10. Februar 2005, 16:46

Soviel muss man doch gar nicht schreiben. Einfach von Exception erben und als Klassenrumpf ein simples 'pass' sollte genügen.

Code: Alles auswählen

>>> class MyError(Exception): pass
...
>>> e = MyError("Blah")
>>> print e
Blah
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 10. Februar 2005, 17:11

Davon abgesehen sind String Exceptions nicht mehr gerne gesehen, da sie recht unflexibel sind.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 11. Februar 2005, 07:07

Aha! Danke euch allen :lol: damit komme ich mehr Pythonlike weiter ;)
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Freitag 11. Februar 2005, 10:00

Leonidas hat geschrieben:Davon abgesehen sind String Exceptions nicht mehr gerne gesehen, da sie recht unflexibel sind.
Wie? Wann? Was? Wo? Warum?
Eigentlich mache ich es ständig im wesentlichen so wie von Dookie vorgeschlagen. Bei etwas komplexeren Programmen fange ich sogar manchmal best. Fehler ab und gebe eigene Exceptions aus - weil ich potentielle Fehler des Nutzers kenne und so eine detaillierte Auskunft geben kann, was falsch läuft. (Natürlich muß man beim Abfangen von Pythonexceptions Vorsicht walten lassen.)
Gebe zu, daß Dookies Beispiel nur einem Gerüst entspricht: Wenn man nur so wenig machen will, mag BlackJacks Alternative reichen. Aber sonst? Gibt es irgendwo geänderte Richtlinien? - Ich habe bislang nichts dergleichen gesehen. Wäre nett, wenn ihr einen Hinweis geben könntet.

Gruß,
Christian
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 11. Februar 2005, 11:59

CM hat geschrieben:Wie? Wann? Was? Wo? Warum?
Eigentlich mache ich es ständig im wesentlichen so wie von Dookie vorgeschlagen.
Ja, Dookie wirft aber auch keine String Exceptions.
CM hat geschrieben:Aber sonst? Gibt es irgendwo geänderte Richtlinien? - Ich habe bislang nichts dergleichen gesehen. Wäre nett, wenn ihr einen Hinweis geben könntet.
Ich glaube du hast nicht verstanden was ich mit String Exceptions meine, die sind wirklich deprecated.

Folgendes geht, ist aber eben nicht gerne gesehen:

Code: Alles auswählen

raise "Der Blabla Fehler"
Jens wollte sowas machen, darauf habe ich gesagt, dass es deprecated ist. Ist ja auch schon älter als das Exception Objekt und war wohl die ursprüngliche Form Exceptions zu werfen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Freitag 11. Februar 2005, 14:22

Hast Recht: Ich habe nicht begriffen, daß Du den Jens meintest. Und mit der zweiten Vermutung hast Du auch Recht: Ich kannte String Exceptions im engeren Sinne nicht. War wohl vor meiner Python-zeit.
Tut mir leid.

Gruß,
Christian
Antworten