Seite 1 von 1

Newbie-Frage: Trace-Infos innerhalb eines Scripts

Verfasst: Dienstag 25. Mai 2004, 09:18
von leoel
Hallo! Bin gerade dabei von PHP auf Python umzusteigen.... Jetzt bin ich auf der Suche nach einem ähnlichen Construct wie in C++ oder eben PHP, mit dem ich mir in einem Script folgende Infos ausgeben kann:
> aktuelle Zeilennummer, in PHP mit "__line__"
> aktuelles File, in PHP mit "__file__"
> aktuelle Funktion, in PHP mit "__function__"
> aktuellle Klasse, in PHP mit "__class__"
> aktuelle MEthode, in PHP mit "__method__"

Für Python habe ich nur __class__ und __dict__ (alle Member der Instanz) gefunden.

Gibt es für "File" und "Line" Möglichkeiten, das herauszufinden?
Danke,
Leo

Re: Newbie-Frage: Trace-Infos innerhalb eines Scripts

Verfasst: Samstag 12. Juni 2004, 10:49
von gerold
leoel hat geschrieben:Gibt es für "File" und "Line" Möglichkeiten, das herauszufinden?
Hallo Leo!

Ich habe mal ein wenig experimentiert und dieser (noch nicht ausgereifte) Code ist dabei herausgekommen:

Code: Alles auswählen

def name_des_startmoduls():
    """Gibt den Namen des vom Benutzer gestarteten Moduls zurueck."""
    from sys import argv
    return argv[0] 

try:
    print name_des_startmoduls_falschername()

except Exception, data:
    import traceback, sys
    tb = traceback.format_tb(sys.exc_traceback)
    print "-"*80
    print "Fehler:         %s" % data
    print "Startmodul:     %s" % sys.argv[0].strip()
    print "Zeilennummer:   %s" % traceback.tb_lineno(sys.exc_traceback)
    print "Dateiname:      %s" % tb[0].split(",")[0].strip()[6:-1]
    print "-"*80
Als Ergebnis kommt unter Windows folgendes raus:

Code: Alles auswählen

--------------------------------------------------------------------------------
Fehler:         name 'name_des_startmoduls_falschername' is not defined
Startmodul:     C:\Dokumente und Einstellungen\Gerold\Desktop\Script1.py
Zeilennummer:   7
Dateiname:      C:\Dokumente und Einstellungen\Gerold\Desktop\Script1.py
--------------------------------------------------------------------------------
Vieleicht hilft es dir ja weiter...

mfg
Gerold
:-)

Edit: Code in Python-Tags gesetzt und die Variable "inst" durch "data" ausgetauscht.

Verfasst: Montag 14. Juni 2004, 12:29
von leoel
Hallo Gerold!

Danke, ich habs inzwischen auch mit Traceback gemacht,
aber dein Zeug hilft noch ein bisschen weiter.

Dankeschön, Leo

Verfasst: Donnerstag 1. Dezember 2005, 12:16
von Gast
Ich danke euch alle! Nach eurer Vorschlägen bin ich bei unittest.py abgeschaut und ich kann mit traceback viel abfragen :D

Boostpy

Verfasst: Donnerstag 1. Dezember 2005, 13:27
von jens
Wenn du aus der PHP Ecke kommst und was für's Web machst, dann füge als erstes in dein Skript folgendes ein:

Code: Alles auswählen

import cgitb;cgitb.enable()
Das "aktiviert" eine art HTML-Traceback, sodas du besser sehen kannst, was schief gelaufen ist. Natürlich muß vorher der Content-type-Header gesendet worden sein...

Re: Newbie-Frage: Trace-Infos innerhalb eines Scripts

Verfasst: Dienstag 20. Dezember 2005, 16:17
von einGast
Hallo,
leoel hat geschrieben:> aktuelle Funktion, in PHP mit "__function__"
Dazu habe ich leider noch nichts gefunden (oder ich bin einfach nur blind ;-))... Gibt es hierfür auch eine Möglichkeit in Python? Fände ich in manchen Situationen ganz nützlich :-)

Danke schon mal für ein paar Tipps!

MfG,
einGast

Re: Newbie-Frage: Trace-Infos innerhalb eines Scripts

Verfasst: Dienstag 20. Dezember 2005, 16:25
von Leonidas
einGast hat geschrieben:
leoel hat geschrieben:> aktuelle Funktion, in PHP mit "__function__"
Dazu habe ich leider noch nichts gefunden (oder ich bin einfach nur blind ;-))... Gibt es hierfür auch eine Möglichkeit in Python? Fände ich in manchen Situationen ganz nützlich :-)
Klar gibts das, ist allerdings etwas versteckt, da es selten gebraucht wird:

Code: Alles auswählen

#!/usr/bin/env python
# -*- encoding: latin-1 -*- 
import sys

def detect_name():
    frame = sys._getframe()
    print frame.f_code.co_name
    
if __name__ == '__main__':
    detect_name()