Wie behandelt ihr aufkommende Fehler?

Begonnen von k00ni, 29. April 2007, 16:10:47

Vorheriges Thema - Nächstes Thema

k00ni

Hallo,
mich interessiert, wie ihr in euren Projekten mit auftretenden Fehlern umgeht. Macht ihr dies einfach über if-Anweisungen die true/false behandeln? Oder sendet ihr Fehlerobjekte zurück, die ihr dann später auswertet?
Nun wurde ja in PHP5 das Konstrukt try-catch eingefügt, was sich dafür ja besonders gut eignet.
Ich selbst bin mir noch nicht so sicher, wie ich das mit den lieben Fehlern mach soll. Zur Zeit fahre ich noch die \"einfachste\" Schiene über die if-Anweisung, welche das Resultat (true oder false) einer Funktion abfragt. Sehr sporadisch und äußerst uneffektiv, ich weiß.
@Powie: Ist von deiner Seite etwas geplant? Den scheinbar besitzen viele Funktionen und Anweisungen im pSys, die ich bis jetzt gesichtet habe, keinerlei von Fehlerbehandlung. Nur einfache Abfragen, die prüfen, ob dies oder jenes einen bestimmten Wert etc. besitzt. Wird es in zukünftigen Versionen ein einheitliches Modell geben? Gedanken dazu existieren bestimmt schon.
 
Grüße

k00ni

Hallo,
ich finde es ja schön, dass ihr hier abstimmt, aber wenn ihr den Punkt Ich nutze ein eigenes/anderes System... auswählt, dann schreibt bitte noch, was ihr genau implementiert habt, um eure Fehler zu behandeln.
 
Grüße

Powie

Ab Version 5 die try/catch Methoden sind angenehm, kenne ich von Delphi her. Bin bisher noch nicht in die Verlegenheit gekommen diese nutzen zu müssen....

mahe

Je nachdem was im Fehlerfall passieren soll /uploads/emoticons/icon_e_biggrin.gif.1a84f5257b36e14b36d04985314f877f.gif\" alt=\":-D\" />

http://blog.mahe.at\" rel=\"external nofollow\">http://blog.mahe.at/wp-content/uploads/2007/06/88x31_1.jpg\" alt=\"88x31_1.jpg\">


Ja, diese Signatur dient zur Werbung!


Und dass ich meine Posts wiederfinde ...


Es ist auch wichtig welcher Art der Fehler ist... Oder etwa nicht?

k00ni

Es ist auch wichtig welcher Art der Fehler ist... Oder etwa nicht?[/quote]
Ja und?  :ugly:
 
Und dass sich der mahe und der Powie zurückhalten, dass war mir fasst schon klar /uploads/emoticons/icon_e_biggrin.gif.1a84f5257b36e14b36d04985314f877f.gif\" alt=\":-D\" />
Bei meiner Anfrage ist die Art des Fehlers nicht entscheidend, sondern wie man allgemein mit Fehlern umgeht. Es gibt ja nun mehrere Herangehensweisen. Die if-else-Variante geht ja nur, wenn man Zustände abfragt. Also ob eine Funktion true oder false zurückliefert. Oder ob Variable X eine Zahl ist. Und so weiter und so fort.
Per try-catch kann man die Art des Fehler besser abfragen. Denn dort können Fehlerobjekte \"geworfen\" werden, je nach Art können sie anders ausgewertet und auf sie reagiert werden.
Ich habe den Eindruck, als macht ihr euch keine so großen Sorgen, was bei Problemen, die während der Interpretierung eurer Skripte auftreten, so passiert. Entweder wird von vorn herein so programmiert, dass man einfach true-false-Konstrukte anwendet oder umgeht vieles , indem man einfach ein echo mysql_error (); schreibt. Soll der User selbst sehen, was er nun damit macht.
Würde ich so bei C# vorgehen, dann würde das Programm mir nur abschmieren. Ständig Exceptions, die nicht gefangen und verarbeitet werden. Irgendwo tritt immer mal etwas unvorhergesehenes auf: Falscher Datenbankname, Fehler im SQL-Query etc. Wenn man diese Fehler nie abfängt, dann kackt (fast) immer gleich die gesamte Anwendung ab; in PHP hört halt einfach das Skript auf und spuckt nen netten Text aus.
Mir ist ja klar, dass man immer Aufwand mit Nutzen abwiegen muss. Das heißt, dass ich mir bei einem kleinen Schnipselskript keine Fehlerbehandlungsroutine einbaue, die an sich doppelt so groß ist, wie das eigentliche Skript. Aber gerade bei Skripten die mit Datenbanken arbeiten, sollte man dort bestimmte Dinge beachten. Denn PHP gibt allgemeine Meldungen aus, oft auch Teile des SQL-Querys; die könnten dann auch mal sensible Daten enthalten. Und wenn Skripte in großen Portalseiten eingesetzt werden und diese mittendrin wegen eines Fehlers den Arsch hochmachen, dann zerknallts einen das Design oder bricht einfach nur mit einem 3 Zeiler ab.
 
Grüße

mahe

http://www.powie.de/cms/forum/showthread.php?id=22493\" rel=\"external nofollow\">hier gehts zum OffTopic
Hier bitte nurmehr Beiträge die auch zum Thema passen!

http://blog.mahe.at\" rel=\"external nofollow\">http://blog.mahe.at/wp-content/uploads/2007/06/88x31_1.jpg\" alt=\"88x31_1.jpg\">


Ja, diese Signatur dient zur Werbung!


Und dass ich meine Posts wiederfinde ...


raiser

und was habt ihr gegen \"bool\" /uploads/emoticons/icon_e_surprised.gif.a8707b3f35a569cb4cfe563fc72ef78d.gif\" alt=\":-o\" />
try - catch, hmmm liest sich gut in der man
aber in php4 möglich?

Wissen ist das einzige Gut, dass sich vermehrt, wenn man es teilt! (Marie von Ebner-Eschenbach)




Irren ist menschlich!




Wer andern eine Grube gräbt,


sollte darüber nachdenken,


ob sie tief genug ist!!!!




Kameradschaft ist, wenn der


Kamerad schafft !!!!


k00ni

Hallo,
und was habt ihr gegen \"bool\" /uploads/emoticons/icon_e_surprised.gif.a8707b3f35a569cb4cfe563fc72ef78d.gif\" alt=\":-o\" />try - catch, hmmm liest sich gut in der man
aber in php4 möglich?
[/quote]
mit bool, also einfache Abfragen, ob etwas so oder so ist, kann man schon sehr effektiv arbeiten. Was ist aber, wenn du beispielsweise eine Funktion hast, die dir sagt, ob etwas bspw. in einer Datenbank existiert und dir dann je nachdem, true oder false zurückliefert? An sich sauber, gibt ja nur 2 Möglichkeiten... und wenn dir zwischendurch was mit der Datenbank passiert (Zuviele Verbindungen mit dem Server, keine Zugriff etc.), was dann ? Mir ging es auch um solche Fälle.
 
Grüße

Was ist aber, wenn du beispielsweise eine Funktion hast, die dir sagt, ob etwas bspw. in einer Datenbank existiert und dir dann je nachdem, true oder false zurückliefert?[/quote]
Einmal besteht natürlich die Möglichkeit, dass man die Booleans für die Fehlersignalisierung verwendet, für die Angabe, ob ein Eintrag existiert oder nicht, als Integer zurückgibt. Wenn man jetzt noch auf die fehlende Typsicherheit bei PHP achtet, kann man so ziemlich effektiv arbeiten.
Ich verwende aber in größeren Projekten eher Exceptions. In kleineren Projekten arbeite ich mit Error-Handlern, trigger_error() und natürlich Konditionen.

sabre

Das lästige an der ganzen Sache ist, dass sich fatale Fehler (z.B. memory size exhausted beim Verändern von Grafiken usw.) nicht abfangen lassen. Gerade da, wo man es wirklich brauchen könnte :-/

\"Ich habe mir immer gewünscht, dass mein Computer so leicht zu bedienen ist wie mein Telefon; mein Wunsch ging in Erfüllung: mein Telefon kann ich jetzt auch nicht mehr bedienen.\" - Bjarne Stroustrup




k00ni

Hallo,
wird dass nicht über ein
 

catch (Exception $excep)
{
...
}

 
 
gefangen? An sich müsste dieser Konstruktur jede Art von Fehlern abfangen.

sabre

Leider nicht. Falls doch, dann wüsste ich gerne wie /uploads/emoticons/icon_e_smile.gif.f7ec63a2b1c3d90a9415e40455642502.gif\" alt=\":-)\" />

\"Ich habe mir immer gewünscht, dass mein Computer so leicht zu bedienen ist wie mein Telefon; mein Wunsch ging in Erfüllung: mein Telefon kann ich jetzt auch nicht mehr bedienen.\" - Bjarne Stroustrup




k00ni

Na wenn du den Code, wo deine Grafikroutinen drin stehen, hier rein schreibst, dürfte es theoretisch funktionieren.
 

try
{
// hier deine Grafikroutinen
}
catch (Exception $Exception)
{
echo $Exception;
}

 
 
Ich bin das nur aus C# gewöhnt, da wird alles abgefangen. Hierbei wird aus Exception eine Art Kontainer, wo alle Arten von Fehlern, die auftreten, reingepackt werden.
Wie gesagt, reine Vermutung. /uploads/emoticons/icon_e_smile.gif.f7ec63a2b1c3d90a9415e40455642502.gif\" alt=\":-)\" />

Es gibt ein paar Randbedingungen, bei deren Auftreten Exception-Handling nicht funktioniert. Beispielsweise wenn man versucht, eine nichtvorhandene Datei unter Windows zu inkludieren und diesen Fehler mit try..catch abzufangen versucht.
Ebenso könnte ich mir vorstellen, dass wenn PHP der Speicher oder die Laufzeit ausgeht, kein Exception-Handling mehr durchgeführt wird. Daran sieht man schön, wie kaputt das Konzept, Laufzeit- und Speicherbeschränkung von dem Interpreter selbst verwalten zu lassen, ist.
\"Nobody trusts those fuckers,  you know that. Every Al ever built has an electromagnetic shotgun wired to its forehead.\"[/quote]

all your base are belong to us / Discord