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
Newbie-Frage: Trace-Infos innerhalb eines Scripts
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo Leo!leoel hat geschrieben:Gibt es für "File" und "Line" Möglichkeiten, das herauszufinden?
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
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
--------------------------------------------------------------------------------
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.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Ich danke euch alle! Nach eurer Vorschlägen bin ich bei unittest.py abgeschaut und ich kann mit traceback viel abfragen
Boostpy
Boostpy
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Wenn du aus der PHP Ecke kommst und was für's Web machst, dann füge als erstes in dein Skript folgendes ein:
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...
Code: Alles auswählen
import cgitb;cgitb.enable()
Hallo,
Danke schon mal für ein paar Tipps!
MfG,
einGast
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ützlichleoel hat geschrieben:> aktuelle Funktion, in PHP mit "__function__"
Danke schon mal für ein paar Tipps!
MfG,
einGast
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Klar gibts das, ist allerdings etwas versteckt, da es selten gebraucht wird:einGast hat geschrieben: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ützlichleoel hat geschrieben:> aktuelle Funktion, in PHP mit "__function__"
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 (former) Modvoice