import cgitb class WeirdObject(object): def __getattr__(self, attr): if attr == 'a': return 'the letter a' elif attr == 'b': return str(slf) # Intentional NameError raise AttributeError(attr) try: weird = WeirdObject() print 'A:', weird.a print 'B:', weird.b print 'C:', weird.c except Exception, e: import sys print print 'Something went wrong - attempting to generate HTML stack trace.' try: html_text = cgitb.html(sys.exc_info()) except: print 'Error generating HTML stack trace!' raise else: print 'Here is stack trace in HTML:' print html_text