B
bearophileHUGS
Hello, here I extend the idea of the smart help I've discussed
recently.
When I receive an error like:
TypeError: fun() takes exactly 2 arguments (1 given)
I'd also like to see that method/function parameters (or the first line
of its docstring).
.. import sys, exceptions, difflib, inspect
..
.. def excepthook(type, value, tb):
.. extra = ""
.. if sys.last_type == exceptions.TypeError:
.. # extra = string of function/method +
.. # parameters inspect.getargspec(function or method)
.. import traceback
.. tblines = traceback.format_exception(type, value, tb)
.. tblines.append(extra)
.. print "".join( map(str, tblines) )
.. sys.exit(1)
..
.. sys.excepthook = excepthook
inspect.getargspec is useful, but how can I find there the class+method
or (function name) of the raised error? I can find the function name
with something like this, but it doesn't look like a nice solution, and
it cannot be used to find the class of the method:
extra = str(sys.last_value)
extra = extra[:extra.find("()")]
Thank you,
Bearophile
recently.
When I receive an error like:
TypeError: fun() takes exactly 2 arguments (1 given)
I'd also like to see that method/function parameters (or the first line
of its docstring).
see that this problem can probably be solved with something like:From a discussion with gentle programmers in another newsgroup, I've
.. import sys, exceptions, difflib, inspect
..
.. def excepthook(type, value, tb):
.. extra = ""
.. if sys.last_type == exceptions.TypeError:
.. # extra = string of function/method +
.. # parameters inspect.getargspec(function or method)
.. import traceback
.. tblines = traceback.format_exception(type, value, tb)
.. tblines.append(extra)
.. print "".join( map(str, tblines) )
.. sys.exit(1)
..
.. sys.excepthook = excepthook
inspect.getargspec is useful, but how can I find there the class+method
or (function name) of the raised error? I can find the function name
with something like this, but it doesn't look like a nice solution, and
it cannot be used to find the class of the method:
extra = str(sys.last_value)
extra = extra[:extra.find("()")]
Thank you,
Bearophile