Python/Exception

From Fundamental Ramen
Jump to navigation Jump to search

Customized messages for traceback

import io
import sys
import traceback

def b():
    n = 1 / 0

def a():
    b()

if __name__ == '__main__':
    try:
        a()
    except:
        exc_type, exc_val, exc_tb = sys.exc_info()
        msgio = io.StringIO()
        msgio.write('Found an exception "%s" (%s) at:' % (exc_val, exc_type.__name__))

        ss = traceback.extract_tb(exc_tb)
        ss.reverse()
        indent_level = 1
        for frm in ss:
            msgio.write('\n')
            msgio.write('  ' * indent_level)
            msgio.write('%s:%s - %s' % (frm.filename, frm.lineno, frm.line))
            indent_level += 1

        msg = msgio.getvalue()
        msgio.close()
        print(msg)

except ... as ex:

try:
    n = 1 / 0
except Exception as ex:
    print('It sucks!')
    print('Class: {}'.format(type(ex).__name__))
    print('Message: {}'.format(ex))
    print('Args:')
    for arg in ex.args:
        print('    {}'.format(arg))

traceback.print_exc()

import traceback

def b():
    n = 1 / 0

def a():
    b()

if __name__ == '__main__':
    try:
        a()
    except:
        traceback.print_exc()

sys.exc_info()

import sys
import traceback

def b():
    n = 1 / 0

def a():
    b()

if __name__ == '__main__':
    try:
        a()
    except:
        exc_type, exc_val, exc_tb = sys.exc_info()
        traceback.print_tb(exc_tb)
        print('%s: %s' % (exc_type.__name__, exc_val))