Get exception description and stack trace which caused an exception, all as a string

前端 未结 11 1940
旧巷少年郎
旧巷少年郎 2020-11-30 16:22

I\'ve seen a lot of posts about stack trace and exceptions in Python. But haven\'t found what I need.

I have a chunk of Python 2.7 code that may raise an exception.

11条回答
  •  伪装坚强ぢ
    2020-11-30 16:46

    Let's create a decently complicated stacktrace, in order to demonstrate that we get the full stacktrace:

    def raise_error():
        raise RuntimeError('something bad happened!')
    
    def do_something_that_might_error():
        raise_error()
    

    Logging the full stacktrace

    A best practice is to have a logger set up for your module. It will know the name of the module and be able to change levels (among other attributes, such as handlers)

    import logging
    logging.basicConfig(level=logging.DEBUG)
    logger = logging.getLogger(__name__)
    

    And we can use this logger to get the error:

    try:
        do_something_that_might_error()
    except Exception as error:
        logger.exception(error)
    

    Which logs:

    ERROR:__main__:something bad happened!
    Traceback (most recent call last):
      File "", line 2, in 
      File "", line 2, in do_something_that_might_error
      File "", line 2, in raise_error
    RuntimeError: something bad happened!
    

    And so we get the same output as when we have an error:

    >>> do_something_that_might_error()
    Traceback (most recent call last):
      File "", line 1, in 
      File "", line 2, in do_something_that_might_error
      File "", line 2, in raise_error
    RuntimeError: something bad happened!
    

    Getting just the string

    If you really just want the string, use the traceback.format_exc function instead, demonstrating logging the string here:

    import traceback
    try:
        do_something_that_might_error()
    except Exception as error:
        just_the_string = traceback.format_exc()
        logger.debug(just_the_string)
    

    Which logs:

    DEBUG:__main__:Traceback (most recent call last):
      File "", line 2, in 
      File "", line 2, in do_something_that_might_error
      File "", line 2, in raise_error
    RuntimeError: something bad happened!
    

提交回复
热议问题