import sys, cgitb def raiseError(): raise ValueError('original error') class dung: def __init__(self,go_mad='getattr1'): self._mad='' self._go_mad=go_mad self._h = self._f def __repr__(self): if self._mad=='repr1': raise ValueError('repr1 madness') return '' def __getattr__(self,a): if self._mad=='getattr1': raise ValueError('getattr1 madness') return self.__dict__['_'+a] def _f(self,*args): self._mad=self._go_mad i = 3 j = 4 raiseError() k = 5 return 7 try: kind = sys.argv[1] except IndexError: kind = 'getattr1' print sys.version d = dung(kind) try: d.h('aaa') except: print cgitb.html(sys.exc_info(),context=3)