Seite 1 von 1
Traceback in Templates falls Funktion nicht fehlerfrei läuft
Verfasst: Donnerstag 18. Juni 2009, 16:45
von Sr4l
Hallo ich stehe auf den Schlauch,
Ich habe eine WSGI Anwendung. In dem ich Jinja2 Templates benutze. Aus denen heraus will ich nun Funktionen direkt ausführen, das mache ich auch. z.B
Nun will ich aber auch einen Traceback bekommen, wenn es mal eins gibt. Deshalb habe ich mir folgendes mit Hilfe von
http://docs.python.org/library/traceback.html geschrieben:
Code: Alles auswählen
import traceback
import sys
def scall(code):
try:
exec code
except:
#return traceback.print_exc()
exceptionType, exceptionValue, exceptionTraceback = sys.exc_info()
erroroutput = traceback.format_exception(exceptionType, exceptionValue, exceptionTraceback)
return "<pre>%s</pre>"%"<br>".join(erroroutput)
Nun rufe ich die Funktion wie folgt auf:
Damit bekomme ich zwar das Traceback aber nichts (None) wenn es funktioniert hat.
Weiteres Porblem `scall` muss ich dort in den Code schreiben von wo aus ich auch das template lade sonst habe ich nicht die gleiche Umgebung und mein exec in scall kennt evl. die lib nicht.
PS: Ich möchte nicht soetwas wie DebuggedApplication(application)
PPS: Wenn es keine schönere Variante gibt werde ich jede Funktion umschreiben und ihnen einen richtiges Try Except schreiben wie es sich eigentlich gehört
mfG Lars
Verfasst: Donnerstag 18. Juni 2009, 20:44
von lunar
Darf man – ganz vorsichtig nur

– den Sinn und Zweck dieser Aktion hinterfragen? Während der Entwicklung sind interaktive Debugger wie Werkzeug doch viel sinnvoller, da man den Traceback mit viel schönerer Formatierung dort auch live untersuchen kann. Im Produktivsystem aber gehören Tracebacks auf jeden Fall ins Log und nicht in die Anzeige! Was du da tust, ergibt für mich vorne und hinten keinen Sinn
Das eigentliche Problem: Du führst "time.time()" zwar aus, und das gibt auch brav einen Wert zurück. Der aber verschwindet im Nirvana, denn du gibst ihn nirgendwo zurück!
Verfasst: Donnerstag 18. Juni 2009, 21:07
von sma
Unnötiger Einsatz von exec. Ich würde folgendes vorschlagen:
und dann `{{ scall(time.time) }}` benutzen.
Stefan
Verfasst: Donnerstag 18. Juni 2009, 22:20
von BerlinerMC
lunar hat geschrieben: Im Produktivsystem aber gehören Tracebacks auf jeden Fall ins Log und nicht in die Anzeige!
Tut das Python automatisch oder muss ich das selber Programmieren?!
Verfasst: Donnerstag 18. Juni 2009, 23:27
von lunar
Wenn überhaupt, dann geschieht das durch das Rahmenwerk, welches die Anwendung ausführt. Falls das Rahmenwerk diese Aufgabe nicht übernimmt, muss man Logging selbst implementiert, Python bietet dafür bereits ein fertiges Modul an.
Verfasst: Dienstag 23. Juni 2009, 16:46
von Sr4l
sma hat geschrieben:Unnötiger Einsatz von exec. Ich würde folgendes vorschlagen:
und dann `{{ scall(time.time) }}` benutzen.
Stefan
Sorry für die später Antwort aber es war Fest.
Da habe ich echt auf dem Schlauch gestanden, ich habe mich ständig gefragt wie ich das Problem umgehen kann, da `def scall(f())` die Funktion aufruft. Auf die Idee `f` zu übergeben bin ich nicht gekommen und die Argumente folgen lassen lassen war zu offensichtlich -.-
Danke.
sma hat geschrieben:Darf man – ganz vorsichtig nur Wink – den Sinn und Zweck dieser Aktion hinterfragen?
Darf man. Die Lösung ist nur für ein Admin Panel gedacht und auch nicht für immer, musst du nicht verstehen finds aber praktisch, weil quick&dirty.

Verfasst: Dienstag 23. Juni 2009, 17:03
von lunar
Sr4l hat geschrieben:sma hat geschrieben:Darf man – ganz vorsichtig nur Wink – den Sinn und Zweck dieser Aktion hinterfragen?
Darf man. Die Lösung ist nur für ein Admin Panel gedacht und auch nicht für immer, musst du nicht verstehen finds aber praktisch, weil quick&dirty.

Ich verstehe in der Tat nicht, wieso ist es
praktisch ist, wenn man den Debugger umgeht und den Traceback mitten in der Seite anzeigt

Verfasst: Dienstag 23. Juni 2009, 17:36
von Leonidas
lunar hat geschrieben:Ich verstehe in der Tat nicht, wieso ist es
praktisch ist, wenn man den Debugger umgeht und den Traceback mitten in der Seite anzeigt

Na weil Debugausgaben mitten auf der Seite 1A PHP-Feeling ergeben.
Verfasst: Dienstag 23. Juni 2009, 17:37
von Sr4l
Ästhetik
*edit*
@leonidas: PHP fealing ala da hat jmd scheiße gecodet aber ich zeige dir trozdem was ich daraus gemacht habe
Verfasst: Dienstag 23. Juni 2009, 17:48
von Leonidas
Sr4l hat geschrieben:Ästhetik

Mit anderen Worten: Du hast noch nie die Debugger-Seite gesehen?
Sr4l hat geschrieben:PHP fealing ala da hat jmd scheiße gecodet aber ich zeige dir trozdem was ich daraus gemacht habe
Da bin ich gespannt

Verfasst: Dienstag 23. Juni 2009, 17:49
von Defnull
Code: Alles auswählen
...<div class="<b>IMPORTANT ERROR</b> Fix this now or the server will explode! I warned you!">...
Verfasst: Dienstag 23. Juni 2009, 18:29
von Sr4l
Leonidas hat geschrieben:Sr4l hat geschrieben:Ästhetik

Mit anderen Worten: Du hast noch nie die Debugger-Seite gesehen?
Doch ich nutze den Werkzeuge Debugger auch ich möchte ihn nur das er bei ein paar Funktionen die im Adminbereich aufgerufen werden nicht anspringt.
Es geht mir dabei hauptsächlich um meiner Mitbenutzer die ich mit der DONT PANIC Seite nicht überfordern möchte. Wenn ich nur das Kurze Standard Traceback in die Seite integriere können sie mir das leichter zu senden.
Verfasst: Dienstag 23. Juni 2009, 18:34
von Defnull
Da du deine Mitbenutzern nicht mit Debugger-Ausgaben 'überfordern' willst, würde ich ausnahmslos alle nicht gefangenen Exceptions in ne Log-Datei schreiben und dem Mitbenutzern ne "Sorry, ich arbeiten dran" Seite präsentieren. Dann sparst du ihnen auch die Mail-Schreiberei.
Verfasst: Dienstag 23. Juni 2009, 18:35
von lunar
Sr4l hat geschrieben:Es geht mir dabei hauptsächlich um meiner Mitbenutzer die ich mit der DONT PANIC Seite nicht überfordern möchte. Wenn ich nur das Kurze Standard Traceback in die Seite integriere können sie mir das leichter zu senden.
Wieso müssen deine Mitbenutzer dir überhaupt den Traceback schicken? Hast du keinen Zugriff auf die Log-Dateien der Anwendungen?
Verfasst: Dienstag 23. Juni 2009, 18:41
von Sr4l
Aktiv ist schon besser wenn sie sich bei mir melden, Log gucken wird vergessen und wirft fragen auf. Zudem ist Debuggen im Browser schon praktischer, wenn ich den Fehler vor mir habe will ich nicht wieder zu den Logs wechseln.
Ich nutze ja auch Werkzeuge Debugger, der sehr sehr gut ist. Wollte nur noch ne alternative, die ich jetzt ja auch habe.
Verfasst: Dienstag 23. Juni 2009, 18:42
von Sr4l
lunar hat geschrieben:Sr4l hat geschrieben:Es geht mir dabei hauptsächlich um meiner Mitbenutzer die ich mit der DONT PANIC Seite nicht überfordern möchte. Wenn ich nur das Kurze Standard Traceback in die Seite integriere können sie mir das leichter zu senden.
Wieso müssen deine Mitbenutzer dir überhaupt den Traceback schicken? Hast du keinen Zugriff auf die Log-Dateien der Anwendungen?
Es ist gut jetzt oder?
Es wirft ja nun auch nicht alle 5Minuten nen Fehler, bisher sogar noch überhaupt keinen.
Verfasst: Dienstag 23. Juni 2009, 19:18
von Leonidas
Ich finds eigentlich am praktischsten Exceptions gemailt zu bekommen.