Seite 1 von 1

except exception, geht aber nicht.

Verfasst: Mittwoch 21. Mai 2008, 20:29
von fuppes
Hi,
hatte gestern schon so ne ähnlich frage, auf die ich ne sehr gut antwort bekommen habe, aber leider funktioniert die lösungen doch net so ganz.
Also folgendes Problem: Ich arbeite mit WSadmin (command line tool für Websphere, das es ermöglich Jython scripts auszuführen) und ich bekomme fehlermeldungen die ich ganz gerne abgefangen hätte. Das problem ist das dich im except nicht definieren kann welche Fehlermeldung ich catchen will.
Kann mir zwar mit sys.exc_info() einen teil der Fehlermeldung ausgeben lassen, aber irgendwie gibt es zwei exceptions und ich komme einfach nicht an den zweiten teil.
Also zuerst mal den try /except teil:

Code: Alles auswählen

...
try:
    print '[ABD INFO] Starting application', app_name
    app_mgr = AdminControl.queryNames('type=ApplicationManager,process='\
                                    + server + ',*')
    AdminControl.invoke(app_mgr,'startApplication',app_name)
    print '[ABD INFO] Application', app_name, 'started'
except:
    print "++++++++++++++++++++++++++++++++++++++++++++"
   
    # error_type, error_value, tb = sys.exc_info()
    # print error_type, type(error_type)
    print "-----------------------------------------"
    # print error_value, type(error_value)
    print "message:"
    # print error_value.message
    print "================================================"
    print "Traceback:"
    print "================================================"
    # traceback.print_exception(error_type, error_value, tb)
    traceback.print_exc()
    print "==========END TRACEBACK========================"
    # print_exception
Mit try /except bekomme ich folgendes:

Code: Alles auswählen

ABD] ++++++++++++++++++++++++++++++++++++++++++++
[ABD] -----------------------------------------
[ABD] com.ibm.ws.scripting.ScriptingException: javax.management.MBeanException: Exception thrown in RequiredModelMBean while trying to invoke operation startApplication org.python.core.PyJavaInstance
[ABD] message:
[ABD] javax.management.MBeanException: Exception thrown in RequiredModelMBean while trying to invoke operation startApplication
[ABD] ================================================
[ABD] Traceback:
[ABD] ================================================
[ABD] org.python.core.PyTraceback
[ABD] ==========END TRACEBACK========================
Wenn man dein obigen teil aber mal ohne try /except ausfphr erhält man folgendes:

Code: Alles auswählen

[ABD] WASX7017E: Exception received while running file "C:\IBM\WebSphere\AppServer\optionalLibraries\jython\thuld_wasadmin\deal_with_exception.py"; exception information: javax.management.MBeanException
[ABD] com.ibm.ws.exception.RuntimeWarning
[ABD] com.ibm.ws.webcontainer.exception.WebAppNotLoadedException: com.ibm.ws.webcontainer.exception.WebAppNotLoadedException: Failed to load webapp: Failed to load webapp: Context root /cards/* is already bound. Cannot start application Cards
[ABD]
Also mit dem try/except bekomme ich irgendwie diesen Teil der Fehlermeldung nicht:
com.ibm.ws.webcontainer.exception.WebAppNotLoadedException: Failed to load webapp: Failed to load webapp: Context root /cards/* is already bound. Cannot start application Cards

Und genau das ist der Teil der mich intereisert.

In dem try/except block habe ich auch mal versucht mit

Code: Alles auswählen

traceback.print_exception(error_type, error_value, tb)
traceback.print_exc()
versucht die gesamte fehlermeldung ausgeben zu lassen, aber die function liefert garnicht.
Jetzt ist die frage ob diese traceback.print_exc() in Jython nicth funktioniert oder ob ich was falsch mache (was garnicht mal so unwahrscheinlich ist, nehme ich an).

Also meine frage ist letztlich wie ich an diesen zweiten teil der nachricht komme. Und ob sich jemand mit Jython auskennt und mir sagen kann ob es erforderlich ist ein bestimmtes improt durchzuführen, damit man solche fehler wie "com.ibm.ws.webcontainer.exception.WebAppNotLoadedException" im except angeben kann.

Vielleicht sollte ich noch sagen, das die ursache der Exception bekannt ist, es also nicht um die behebung der exception geht, sondern umd das behanden von exceptions im allgemeinen.