Python/Exception: Difference between revisions

From Fundamental Ramen
Jump to navigation Jump to search
No edit summary
 
(5 intermediate revisions by the same user not shown)
Line 1: Line 1:
=== Customized messages for traceback ===
<source lang="python">
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)
</source>
=== except ... as ex: ===
=== except ... as ex: ===


Line 13: Line 47:
</source>
</source>


=== traceback.print_exc ===
=== traceback.print_exc() ===


<source lang="python">
<source lang="python">
import traceback
import traceback


def c():
def b():
     n = 1 / 0
     n = 1 / 0
def a():
    b()
if __name__ == '__main__':
    try:
        a()
    except:
        traceback.print_exc()
</source>
=== sys.exc_info() ===
<source lang="python">
import sys
import traceback


def b():
def b():
     c()
     n = 1 / 0


def a():
def a():
Line 31: Line 81:
         a()
         a()
     except:
     except:
         traceback.print_exc()
        exc_type, exc_val, exc_tb = sys.exc_info()
         traceback.print_tb(exc_tb)
        print('%s: %s' % (exc_type.__name__, exc_val))
</source>
</source>

Latest revision as of 04:34, 26 September 2019

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))