Seite 1 von 1
print AktuelleZeilenNummer ???
Verfasst: Sonntag 8. August 2004, 16:40
von genrich
Aus dem Posting kann man lesen, wie man mit traceback an die aktuelle Zeilennummer ran kommt:
http://python.sandtner.org/viewtopic.php?p=8616#8616
Allerdings funktioniert das doch nur bei einem except.
Wie komme ich an die aktuelle Zeilennummer, einfach so?
z.B.
Verfasst: Sonntag 8. August 2004, 17:26
von genrich
Ich glaube ich schreibe mit lieber eine eingene Fehlermeldung... Das wollte ich im Prinzip eh machen
Aber so richtig funktioniert das nicht:
Code: Alles auswählen
class Fehler(Exception):
def __init__(self):
import traceback, sys
tb = traceback.format_tb(sys.last_traceback)
print "-"*80
print "Fehler: %s" % inst
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
sys.exit()
raise Fehler
Ich erhalte den Fehler:
Code: Alles auswählen
tb = traceback.format_tb(sys.last_traceback)
AttributeError: 'module' object has no attribute 'last_traceback'
Verfasst: Sonntag 8. August 2004, 19:14
von Dookie
Hi genrich,
last_traceback ist nicht immer verfügbar, nimm besser sys.exc_info().
Aber eigentlich ist das ganze so eh etwas vermurkst.
Schau besser mal ins Pythontutorial:
http://www.python.org/doc/current/tut/n ... 0000000000
hier noch wie es gehen könnte:
Code: Alles auswählen
import sys, traceback
class Fehler(Exception):
def __init__(self, value):
self.value = value
exc = traceback.extract_stack()
print "-"*80
print "Fehler: %s" % exc[0][3]
print "Startmodul: %s" % sys.argv[0].strip()
print "Zeilennummer: %s" % exc[0][1]
print "Dateiname: %s" % exc[0][0]
print "-"*80
sys.exit()
def __str__(self):
return repr(self.value)
raise Fehler, "uups"
Gruß
Dookie
Verfasst: Sonntag 8. August 2004, 19:42
von Gast
Wie immer bist du meine Rettung....
Ich hab's noch ein bischen gekürzt...
Ein Zusätzlichen FehlerText (also raise Fehler,"FehlerText") benötige ich nicht, ansonsten ist es das selbe Ergebniss:
Code: Alles auswählen
import sys,traceback
class Fehler:
def __init__(self):
exc = traceback.extract_stack()
print "-"*80
print "Fehler: %s" % exc[0][3]
print "Startmodul: %s" % __file__
print "Zeilennummer: %s" % exc[0][1]
print "Dateiname: %s" % exc[0][0]
print "-"*80
sys.exit()
raise Fehler
Verfasst: Sonntag 8. August 2004, 19:44
von genrich
(Ups, da war ich wohl nicht eingeloggt...)
"Startmodul" und "Dateiname" ist natürlich jetzt Humbug...
Verfasst: Sonntag 8. August 2004, 19:48
von Dookie
Code: Alles auswählen
class Fehler:
def __init__(self):
exc = traceback.extract_stack()
print "-"*80
print "Fehler: %s" % exc[-2][3]
print "Startmodul: %s" % __file__
print "Zeilennummer: %s" % exc[-2][1]
print "Dateiname: %s" % exc[-2][0]
print "-"*80
sys.exit()
ist noch etwas besser, dann wird immer der letzte Trace vor dem __init__ ausgegeben.
Gruß
Dookie
Verfasst: Sonntag 8. August 2004, 20:15
von genrich
Mist, das ist mir gerade auch aufgefallen, aber du warst schneller
Allerdings hatte ich eine sehr umständlich Lösung:
Aber wie du gezeigt hast geht's ja wieder viel einfacher![/python]
Verfasst: Sonntag 8. August 2004, 21:59
von RainBowBender