summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1995-02-27 13:13:40 (GMT)
committerGuido van Rossum <guido@python.org>1995-02-27 13:13:40 (GMT)
commit5e38b6fda1d4e2822ac72e1f643f251bd0f3175b (patch)
tree4a86a9f4be277dd15b9957a15d768a7b09966e3e
parent051ab123b465685e714668099c0a6dd86de5673b (diff)
downloadcpython-5e38b6fda1d4e2822ac72e1f643f251bd0f3175b.zip
cpython-5e38b6fda1d4e2822ac72e1f643f251bd0f3175b.tar.gz
cpython-5e38b6fda1d4e2822ac72e1f643f251bd0f3175b.tar.bz2
handle class exceptions; added runeval; made runctx obsolete
-rw-r--r--Lib/bdb.py37
-rw-r--r--Lib/lib-stdwin/wdb.py19
-rw-r--r--Lib/lib-stdwin/wdbframewin.py5
-rwxr-xr-xLib/pdb.py32
-rwxr-xr-xLib/stdwin/wdb.py19
-rwxr-xr-xLib/stdwin/wdbframewin.py5
6 files changed, 88 insertions, 29 deletions
diff --git a/Lib/bdb.py b/Lib/bdb.py
index 0d139d4..6d0536d 100644
--- a/Lib/bdb.py
+++ b/Lib/bdb.py
@@ -270,36 +270,59 @@ class Bdb: # Basic Debugger
# The following two methods can be called by clients to use
# a debugger to debug a statement, given as a string.
- def run(self, cmd):
- import __main__
- dict = __main__.__dict__
- self.runctx(cmd, dict, dict)
+ def run(self, cmd, globals=None, locals=None):
+ if globals is None:
+ import __main__
+ globals = __main__.__dict__
+ if locals is None:
+ locals = globals
+ self.reset()
+ sys.settrace(self.trace_dispatch)
+ try:
+ try:
+ exec cmd + '\n' in globals, locals
+ except BdbQuit:
+ pass
+ finally:
+ self.quitting = 1
+ sys.settrace(None)
- def runctx(self, cmd, globals, locals):
+ def runeval(self, expr, globals=None, locals=None):
+ if globals is None:
+ import __main__
+ globals = __main__.__dict__
+ if locals is None:
+ locals = globals
self.reset()
sys.settrace(self.trace_dispatch)
try:
try:
- exec(cmd + '\n', globals, locals)
+ return eval(expr + '\n', globals, locals)
except BdbQuit:
pass
finally:
self.quitting = 1
sys.settrace(None)
+ def runctx(self, cmd, globals, locals):
+ # B/W compatibility
+ self.run(cmd, globals, locals)
+
# This method is more useful to debug a single function call.
def runcall(self, func, *args):
self.reset()
sys.settrace(self.trace_dispatch)
+ res = None
try:
try:
- apply(func, args)
+ res = apply(func, args)
except BdbQuit:
pass
finally:
self.quitting = 1
sys.settrace(None)
+ return res
def set_trace():
diff --git a/Lib/lib-stdwin/wdb.py b/Lib/lib-stdwin/wdb.py
index 4018ab1..27bbe51 100644
--- a/Lib/lib-stdwin/wdb.py
+++ b/Lib/lib-stdwin/wdb.py
@@ -75,7 +75,10 @@ class Wdb(bdb.Bdb, basewin.BaseWindow): # Window debugger
# This function is called if an exception occurs,
# but only if we are to stop at or just below this level
frame.f_locals['__exception__'] = exc_type, exc_value
- self.settitle(exc_type + ': ' + repr.repr(exc_value))
+ if type(exc_type) == type(''):
+ exc_type_name = exc_type
+ else: exc_type_name = exc_type.__name__
+ self.settitle(exc_type_name + ': ' + repr.repr(exc_value))
stdwin.fleep()
self.interaction(frame, exc_traceback)
if not self.closed:
@@ -271,19 +274,23 @@ class Wdb(bdb.Bdb, basewin.BaseWindow): # Window debugger
# Simplified interface
-def run(statement):
+def run(statement, globals=None, locals=None):
x = Wdb()
- try: x.run(statement)
+ try: x.run(statement, globals, locals)
finally: x.close()
-def runctx(statement, globals, locals):
+def runeval(expression, globals=None, locals=None):
x = Wdb()
- try: x.runctx(statement, globals, locals)
+ try: return x.runeval(expression, globals, locals)
finally: x.close()
+def runctx(statement, globals, locals):
+ # B/W compatibility
+ run(statement, globals, locals)
+
def runcall(*args):
x = Wdb()
- try: apply(x.runcall, args)
+ try: return apply(x.runcall, args)
finally: x.close()
def set_trace():
diff --git a/Lib/lib-stdwin/wdbframewin.py b/Lib/lib-stdwin/wdbframewin.py
index 13bd173..7a0ff39 100644
--- a/Lib/lib-stdwin/wdbframewin.py
+++ b/Lib/lib-stdwin/wdbframewin.py
@@ -100,7 +100,10 @@ class FrameWindow(basewin.BaseWindow):
value = eval(expr, globals, locals)
output = repr.repr(value)
except:
- output = sys.exc_type + ': ' + `sys.exc_value`
+ if type(sys.exc_type) == type(''):
+ exc_type_name = sys.exc_type
+ else: exc_type_name = sys.exc_type.__name__
+ output = exc_type_name + ': ' + `sys.exc_value`
self.displaylist[1] = output
lh = stdwin.lineheight()
r = (-10, 0), (30000, 2*lh)
diff --git a/Lib/pdb.py b/Lib/pdb.py
index 3796e0d..7a00b83 100755
--- a/Lib/pdb.py
+++ b/Lib/pdb.py
@@ -55,7 +55,10 @@ class Pdb(bdb.Bdb, cmd.Cmd):
# This function is called if an exception occurs,
# but only if we are to stop at or just below this level
frame.f_locals['__exception__'] = exc_type, exc_value
- print exc_type + ':', repr.repr(exc_value)
+ if type(exc_type) == type(''):
+ exc_type_name = exc_type
+ else: exc_type_name = exc_type.__name__
+ print exc_type_name + ':', repr.repr(exc_value)
self.interaction(frame, exc_traceback)
# General interaction function
@@ -74,7 +77,10 @@ class Pdb(bdb.Bdb, cmd.Cmd):
try:
exec(line + '\n', globals, locals)
except:
- print '***', sys.exc_type + ':', sys.exc_value
+ if type(sys.exc_type) == type(''):
+ exc_type_name = sys.exc_type
+ else: exc_type_name = sys.exc_type.__name__
+ print '***', exc_type_name + ':', sys.exc_value
# Command definitions, called by cmdloop()
# The argument is the remaining string on the command line
@@ -199,7 +205,10 @@ class Pdb(bdb.Bdb, cmd.Cmd):
value = eval(arg, self.curframe.f_globals, \
self.curframe.f_locals)
except:
- print '***', sys.exc_type + ':', `sys.exc_value`
+ if type(sys.exc_type) == type(''):
+ exc_type_name = sys.exc_type
+ else: exc_type_name = sys.exc_type.__name__
+ print '***', exc_type_name + ':', `sys.exc_value`
return
print `value`
@@ -254,7 +263,10 @@ class Pdb(bdb.Bdb, cmd.Cmd):
value = eval(arg, self.curframe.f_globals, \
self.curframe.f_locals)
except:
- print '***', sys.exc_type + ':', `sys.exc_value`
+ if type(sys.exc_type) == type(''):
+ exc_type_name = sys.exc_type
+ else: exc_type_name = sys.exc_type.__name__
+ print '***', exc_type_name + ':', `sys.exc_value`
return
code = None
# Is it a function?
@@ -429,14 +441,18 @@ class Pdb(bdb.Bdb, cmd.Cmd):
# Simplified interface
-def run(statement):
- Pdb().run(statement)
+def run(statement, globals=None, locals=None):
+ Pdb().run(statement, globals, locals)
+
+def runeval(expression, globals=None, locals=None):
+ return Pdb().runeval(expression, globals, locals)
def runctx(statement, globals, locals):
- Pdb().runctx(statement, globals, locals)
+ # B/W compatibility
+ run(statement, globals, locals)
def runcall(*args):
- apply(Pdb().runcall, args)
+ return apply(Pdb().runcall, args)
def set_trace():
Pdb().set_trace()
diff --git a/Lib/stdwin/wdb.py b/Lib/stdwin/wdb.py
index 4018ab1..27bbe51 100755
--- a/Lib/stdwin/wdb.py
+++ b/Lib/stdwin/wdb.py
@@ -75,7 +75,10 @@ class Wdb(bdb.Bdb, basewin.BaseWindow): # Window debugger
# This function is called if an exception occurs,
# but only if we are to stop at or just below this level
frame.f_locals['__exception__'] = exc_type, exc_value
- self.settitle(exc_type + ': ' + repr.repr(exc_value))
+ if type(exc_type) == type(''):
+ exc_type_name = exc_type
+ else: exc_type_name = exc_type.__name__
+ self.settitle(exc_type_name + ': ' + repr.repr(exc_value))
stdwin.fleep()
self.interaction(frame, exc_traceback)
if not self.closed:
@@ -271,19 +274,23 @@ class Wdb(bdb.Bdb, basewin.BaseWindow): # Window debugger
# Simplified interface
-def run(statement):
+def run(statement, globals=None, locals=None):
x = Wdb()
- try: x.run(statement)
+ try: x.run(statement, globals, locals)
finally: x.close()
-def runctx(statement, globals, locals):
+def runeval(expression, globals=None, locals=None):
x = Wdb()
- try: x.runctx(statement, globals, locals)
+ try: return x.runeval(expression, globals, locals)
finally: x.close()
+def runctx(statement, globals, locals):
+ # B/W compatibility
+ run(statement, globals, locals)
+
def runcall(*args):
x = Wdb()
- try: apply(x.runcall, args)
+ try: return apply(x.runcall, args)
finally: x.close()
def set_trace():
diff --git a/Lib/stdwin/wdbframewin.py b/Lib/stdwin/wdbframewin.py
index 13bd173..7a0ff39 100755
--- a/Lib/stdwin/wdbframewin.py
+++ b/Lib/stdwin/wdbframewin.py
@@ -100,7 +100,10 @@ class FrameWindow(basewin.BaseWindow):
value = eval(expr, globals, locals)
output = repr.repr(value)
except:
- output = sys.exc_type + ': ' + `sys.exc_value`
+ if type(sys.exc_type) == type(''):
+ exc_type_name = sys.exc_type
+ else: exc_type_name = sys.exc_type.__name__
+ output = exc_type_name + ': ' + `sys.exc_value`
self.displaylist[1] = output
lh = stdwin.lineheight()
r = (-10, 0), (30000, 2*lh)