Showing the method's class in expection's traceback

Agustin Villena agustin.villena at gmail.com
Wed May 21 19:48:04 EDT 2008


On 20 mayo, 12:10, "Gabriel Genellina" <gagsl-... at yahoo.com.ar> wrote:
> En Mon, 19 May 2008 10:54:05 -0300, Agustin Villena
> <agustin.vill... at gmail.com> escribió:
>
> > On May 18, 4:31 pm, "Diez B. Roggisch" <de... at nospam.web.de> wrote:
> >> Agustin Villena schrieb:
>
> >> > is there anyway to show the class of amethodin anexception's
> >> > traceback?
> >> > I want to improve the line
> >> > File "G:\dev\exceptions\sample.py", line 3, in foo
> >> > to
> >> > File "G:\dev\exceptions\sample.py", line 3, in Some.foo
>
> >> It should be. You can get a dictionary of the locals of anexception
> >> stack frame, of which you could extract the self-parameter's class.
>
> > I digged on sys.exc_info() object and the traceback module and I
> > could't figure how I can get the locals() of theexceptionstackframe
>
> Put this function in traceback.py, and replace the lines
>          name = co.co_name
> with
>          name = guess_full_method_name(f)
> everywhere.
> Please read the docstring!!!
>
> def guess_full_method_name(frame):
>      """Guess classname.methodname for a given frame.
>
>      Only a guess!
>      Assumes the frame belongs to an instancemethod
>      whose first argument is "self", or a classmethod
>      whose first argument is "cls".
>      Doesn't handle correctly any other situation.
>      Returns the class name of the object on which
>      the method was called, not the class where
>      the method was actually defined.
>      """
>      cls_name = None
>      fun_name = frame.f_code.co_name
>      self = frame.f_locals.get('self', None)
>      if self is None:
>          cls = frame.f_locals.get('cls', None)
>      else:
>          cls = getattr(self, '__class__', None)
>      if cls is not None:
>          cls_name = getattr(cls, '__name__', None)
>          if cls_name is not None:
>              return '%s.%s' % (cls_name, fun_name)
>      return fun_name
>
> --
> Gabriel Genellina

Thanks!  I'll try it

Agustin



More information about the Python-list mailing list