Newbie-Frage: Trace-Infos innerhalb eines Scripts

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.
Benutzeravatar
leoel
User
Beiträge: 36
Registriert: Dienstag 25. Mai 2004, 08:54
Wohnort: Graz

Newbie-Frage: Trace-Infos innerhalb eines Scripts

Beitragvon leoel » Dienstag 25. Mai 2004, 09:18

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
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

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

Beitragvon gerold » Samstag 12. Juni 2004, 10:49

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=]--------------------------------------------------------------------------------
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
--------------------------------------------------------------------------------
[/code]
Vieleicht hilft es dir ja weiter...

mfg
Gerold
:-)

Edit: Code in Python-Tags gesetzt und die Variable "inst" durch "data" ausgetauscht.
Zuletzt geändert von gerold am Montag 22. Mai 2006, 15:11, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
leoel
User
Beiträge: 36
Registriert: Dienstag 25. Mai 2004, 08:54
Wohnort: Graz

Beitragvon leoel » Montag 14. Juni 2004, 12:29

Hallo Gerold!

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

Dankeschön, Leo
Gast

Beitragvon Gast » Donnerstag 1. Dezember 2005, 12:16

Ich danke euch alle! Nach eurer Vorschlägen bin ich bei unittest.py abgeschaut und ich kann mit traceback viel abfragen :D

Boostpy
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Donnerstag 1. Dezember 2005, 13:27

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...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
einGast

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

Beitragvon einGast » Dienstag 20. Dezember 2005, 16:17

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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

Beitragvon Leonidas » Dienstag 20. Dezember 2005, 16:25

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()
My god, it's full of CARs! | Leonidasvoice vs Modvoice

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder