statt traceback nur exception-typ und message ausgeben

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.
Jona
User
Beiträge: 94
Registriert: Sonntag 23. September 2007, 23:25

statt traceback nur exception-typ und message ausgeben

Beitragvon Jona » Dienstag 25. September 2007, 11:22

Hi,

ich möchte statt einem kompletten stacktrace nur exception-typ und message ausgeben, also quasi die letzte zeile des traceback.

habe das mit traceback.format_exception_only probiert, aber da ich die exception ja grade behandele ist sys.last_type nicht existent.

Muss ich mir diese nachricht also für jeden exc.-typ selbst zusammenbasteln (siehe beispiel)

komme ich über die Errno an den namen der exception?

gibt es eine übersicht welche attribute die verschiedenen exceptions haben und wie die besetzt sind. bei IOError ist message zb leer, dafür strerror besetzt....


Code: Alles auswählen

try: reader = csv.reader(open(sys.argv[1], "rb"))
except IOError, e:
   
    # print traceback.format_exception_only( sys.last_type, sys.last_value )
    # -> AttributeError: 'module' object has no attribute 'last_type'
   
    print(type(e))
    print "e.message: " + str(e.message)
    print "e.args: " + str(e.args)
    print "e.errno: " + str(e.errno)
    print "e.filename: " + str(e.filename)
    print "e.strerror: " + str(e.strerror)
    #*zusammenbastel*
    print "IOError: %s : '%s'" % (e.strerror, e.filename)
   
    raise
   
    sys.exit(ERROR_IOERROR)

except:
    raise
    sys.exit(ERROR_UNKNOWN)


Ausgabe:

Code: Alles auswählen

<type 'exceptions.IOError'>
e.message:
e.args: (2, 'No such file or directory')
e.errno: 2
e.filename: t.csv
e.strerror: No such file or directory
IOError: No such file or directory : 't.csv'
Traceback (most recent call last):
  File "build_config.py", line 349, in <module>
    try: reader = csv.reader(open(sys.argv[1], "rb"))
IOError: [Errno 2] No such file or directory: 't.csv'
BlackJack

Beitragvon BlackJack » Dienstag 25. September 2007, 11:38

Nicht zur eigentlichen Frage aber: Code nach einem ``raise`` wird natürlich nicht mehr ausgeführt.
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Beitragvon Zap » Dienstag 25. September 2007, 12:01

Wenn du die BasisKlasse Exception abfängst, hast du schon ne ganze Menge abgedeckt. Kannst dir über den Klassennnamen die Info holen was für eine Exception du vorliegen hast.

Code: Alles auswählen

In [11]: try: raise IOError("AUA")
         except Exception, e: pass
   ....:

In [12]: dir(e)
Out[12]:
['__class__',
 '__delattr__',
 '__dict__',
 '__doc__',
 '__getattribute__',
 '__getitem__',
 '__hash__',
 '__init__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__setattr__',
 '__setstate__',
 '__str__',
 'args',
 'errno',
 'filename',
 'message',
 'strerror']

In [13]: e.__class__.__name__
Out[13]: 'IOError'

Wer ist online?

Mitglieder in diesem Forum: Google [Bot]