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