2016-10-25 9 views
2

Diese Funktion soll Ausnahmen in der Hauptausführung abfangen. Wenn eine Ausnahme vorliegt, sollte der Fehler mit log.error(traceback.print_exc()) ausgedruckt und mit exit_main() bereinigt werden.Python traceback.print_exc() gibt 'None' zurück.

def main(): 
    try: 
     exec_app() 
    except KeyboardInterrupt: 
     log.error('Error: Backup aborted by user.') 
     exit_main() 
    except Exception: 
     log.error('Error: An Exception was thrown.') 
     log.error("-" * 60) 
     log.error(traceback.print_exc()) 
     log.error("-" * 60) 
     exit_main() 

Leider log.error(traceback.print_exc()) zurückkehrt nur None wenn es eine Ausnahme ist. Wie kann ich den vollständigen Fehlerbericht in diesem Fall rückverfolgen?

PS: Ich benutze Python 3.4.

+0

Welche Art von Ausnahme erwarten Sie mit 'traceback.print_exc()' angemeldet sein? Es protokolliert alle Ausnahmen außer 'KeyboardInterrupt' – ettanany

+0

Ja. Es sollte alle Ausnahmen behandeln, die ich nicht in 'exec_app()' gefangen habe. – Rotareti

Antwort

5

Von seiner __doc__:

Shorthand for 'print_exception(sys.exc_type, sys.exc_value, sys.exc_traceback, limit, file)' 

Das heißt, es nichts soll zurückkehren, ist sein Auftrag zu drucken. Wenn das Traceback als Zeichenfolge protokolliert werden soll, verwenden Sie stattdessen .

1

Normalerweise verwende ich traceback.print_exc() nur zum Debuggen. In Ihrem Fall Ihre Ausnahme anmelden können Sie einfach wie folgt vor:

try: 
    # Your code that might raise exceptions 
except SomeSpecificException as e: 
    # Do something (log the exception, rollback, etc) 
except Exception as e: 
    log.error(e) # or log(e.message) if you want to log only the message and not all the error stack 
Verwandte Themen