En Mon, 19 May 2008 10:54:05 -0300, Agustin Villena <[EMAIL PROTECTED]> escribió:
On May 18, 4:31 pm, "Diez B. Roggisch" <[EMAIL PROTECTED]> wrote:
Agustin Villena schrieb:

> is there anyway to show the class of amethodin an exception'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 an exception
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 the exception stackframe

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

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to