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