Remove sys.exc_type, sys.exc_value, sys.exc_traceback

This commit is contained in:
Neal Norwitz 2006-03-17 05:49:33 +00:00
parent fc85c92a85
commit ac3625fcb9
16 changed files with 36 additions and 58 deletions

View File

@ -233,7 +233,7 @@ def checkop(expr, a, b, value, fuzz = 1e-6):
try:
result = eval(expr)
except:
result = sys.exc_type
result = sys.exc_info()[0]
print '->', result
if isinstance(result, str) or isinstance(value, str):
ok = (result == value)

View File

@ -83,7 +83,7 @@ class Server:
method = getattr(self, methodname)
reply = (None, apply(method, args), id)
except:
reply = (sys.exc_type, sys.exc_value, id)
reply = (sys.exc_info()[:2], id)
if id < 0 and reply[:2] == (None, None):
if self._verbose > 1: print "Suppress reply"
return 1

View File

@ -191,7 +191,8 @@ def browse_menu(selector, host, port):
try:
browserfunc(i_selector, i_host, i_port)
except (IOError, socket.error):
print '***', sys.exc_type, ':', sys.exc_value
t, v, tb = sys.exc_info()
print '***', t, ':', v
else:
print 'Unsupported object type'

View File

@ -23,12 +23,9 @@ carefully propagated, additional calls into the Python/C API may not
behave as intended and may fail in mysterious ways.
The error indicator consists of three Python objects corresponding to
\withsubitem{(in module sys)}{
\ttindex{exc_type}\ttindex{exc_value}\ttindex{exc_traceback}}
the Python variables \code{sys.exc_type}, \code{sys.exc_value} and
\code{sys.exc_traceback}. API functions exist to interact with the
error indicator in various ways. There is a separate error indicator
for each thread.
the result of \code{sys.exc_info()}. API functions exist to interact
with the error indicator in various ways. There is a separate
error indicator for each thread.
% XXX Order of these should be more thoughtful.
% Either alphabetical or some kind of structure.

View File

@ -400,15 +400,12 @@ exception state.
The full exception state consists of three objects (all of which can
be \NULL): the exception type, the corresponding exception
value, and the traceback. These have the same meanings as the Python
\withsubitem{(in module sys)}{
\ttindex{exc_type}\ttindex{exc_value}\ttindex{exc_traceback}}
objects \code{sys.exc_type}, \code{sys.exc_value}, and
\code{sys.exc_traceback}; however, they are not the same: the Python
result of \code{sys.exc_info()}; however, they are not the same: the Python
objects represent the last exception being handled by a Python
\keyword{try} \ldots\ \keyword{except} statement, while the C level
exception state only exists while an exception is being passed on
between C functions until it reaches the Python bytecode interpreter's
main loop, which takes care of transferring it to \code{sys.exc_type}
main loop, which takes care of transferring it to \code{sys.exc_info()}
and friends.
Note that starting with Python 1.5, the preferred, thread-safe way to

View File

@ -120,9 +120,8 @@ variable is \NULL{} no exception has occurred. A second global
variable stores the ``associated value'' of the exception (the second
argument to \keyword{raise}). A third variable contains the stack
traceback in case the error originated in Python code. These three
variables are the C equivalents of the Python variables
\code{sys.exc_type}, \code{sys.exc_value} and \code{sys.exc_traceback} (see
the section on module \module{sys} in the
variables are the C equivalents of the result in Python of
\method{sys.exc_info()} (see the section on module \module{sys} in the
\citetitle[../lib/lib.html]{Python Library Reference}). It is
important to know about them to understand how errors are passed
around.

View File

@ -12,9 +12,8 @@ when you want to print stack traces under program control, such as in a
``wrapper'' around the interpreter.
The module uses traceback objects --- this is the object type that is
stored in the variables \code{sys.exc_traceback} (deprecated) and
\code{sys.last_traceback} and returned as the third item from
\function{sys.exc_info()}.
stored in the \code{sys.last_traceback} variable and returned
as the third item from \function{sys.exc_info()}.
\obindex{traceback}
The module defines the following functions:
@ -41,11 +40,7 @@ with a caret indicating the approximate position of the error.
\end{funcdesc}
\begin{funcdesc}{print_exc}{\optional{limit\optional{, file}}}
This is a shorthand for \code{print_exception(sys.exc_type,
sys.exc_value, sys.exc_traceback, \var{limit}, \var{file})}. (In
fact, it uses \function{sys.exc_info()} to retrieve the same
information in a thread-safe way instead of using the deprecated
variables.)
This is a shorthand for \code{print_exception(*\function{sys.exc_info()}}.
\end{funcdesc}
\begin{funcdesc}{format_exc}{\optional{limit}}

View File

@ -250,21 +250,15 @@ occurs in the try clause of the inner handler, the outer handler will
not handle the exception.)
Before an except clause's suite is executed, details about the
exception are assigned to three variables in the
\module{sys}\refbimodindex{sys} module: \code{sys.exc_type} receives
the object identifying the exception; \code{sys.exc_value} receives
the exception's parameter; \code{sys.exc_traceback} receives a
exception are stored in the \module{sys}\refbimodindex{sys} module
and can be access via \function{sys.exc_info()}. \function{sys.exc_info()}
returns a 3-tuple consisting of: \code{exc_type} receives
the object identifying the exception; \code{exc_value} receives
the exception's parameter; \code{exc_traceback} receives a
traceback object\obindex{traceback} (see section~\ref{traceback})
identifying the point in the program where the exception occurred.
These details are also available through the \function{sys.exc_info()}
function, which returns a tuple \code{(\var{exc_type}, \var{exc_value},
\var{exc_traceback})}. Use of the corresponding variables is
deprecated in favor of this function, since their use is unsafe in a
threaded program. As of Python 1.5, the variables are restored to
their previous values (before the call) when returning from a function
that handled an exception.
\withsubitem{(in module sys)}{\ttindex{exc_type}
\ttindex{exc_value}\ttindex{exc_traceback}}
\function{sys.exc_info()} values are restored to their previous values
(before the call) when returning from a function that handled an exception.
The optional \keyword{else} clause is executed if and when control
flows off the end of the \keyword{try} clause.\footnote{

View File

@ -261,7 +261,7 @@ class SimpleXMLRPCDispatcher:
except:
# report exception back to server
response = xmlrpclib.dumps(
xmlrpclib.Fault(1, "%s:%s" % (sys.exc_type, sys.exc_value)),
xmlrpclib.Fault(1, "%s:%s" % sys.exc_info()[:2]),
encoding=self.encoding, allow_none=self.allow_none,
)
@ -362,7 +362,7 @@ class SimpleXMLRPCDispatcher:
except:
results.append(
{'faultCode' : 1,
'faultString' : "%s:%s" % (sys.exc_type, sys.exc_value)}
'faultString' : "%s:%s" % sys.exc_info()[:2]}
)
return results

View File

@ -45,8 +45,8 @@ class WindowList:
try:
callback()
except:
print "warning: callback failed in WindowList", \
sys.exc_type, ":", sys.exc_value
t, v, tb = sys.exc_info()
print "warning: callback failed in WindowList", t, ":", v
registry = WindowList()

View File

@ -1108,7 +1108,7 @@ class Misc:
def _report_exception(self):
"""Internal function."""
import sys
exc, val, tb = sys.exc_type, sys.exc_value, sys.exc_traceback
exc, val, tb = sys.exc_info()
root = self._root()
root.report_callback_exception(exc, val, tb)
def _configure(self, cmd, cnf, kw):

View File

@ -203,9 +203,7 @@ def _some_str(value):
def print_exc(limit=None, file=None):
"""Shorthand for 'print_exception(sys.exc_type, sys.exc_value, sys.exc_traceback, limit, file)'.
(In fact, it uses sys.exc_info() to retrieve the same information
in a thread-safe way.)"""
"""Shorthand for 'print_exception(*sys.exc_info(), limit, file)'."""
if file is None:
file = sys.stderr
try:

View File

@ -105,7 +105,8 @@ class Debugger(bdb.Bdb):
raise 'spam'
except:
pass
frame = sys.exc_traceback.tb_frame
tb = sys.exc_info()[2]
frame = tb.tb_frame
while frame is not None:
del frame.f_trace
frame = frame.f_back
@ -527,7 +528,7 @@ class Debugger(bdb.Bdb):
raise bdb.BdbQuit
except:
print 'XXX Exception during debugger interaction.', \
self.formatexception(sys.exc_type, sys.exc_value)
self.formatexception(sys.exc_info[:2])
import traceback
traceback.print_exc()
return self.trace_dispatch
@ -855,7 +856,8 @@ def startfromhere():
try:
raise 'spam'
except:
frame = sys.exc_traceback.tb_frame.f_back
tb = sys.exc_info()[2]
frame = tb.tb_frame.f_back
d.start(frame)
def startfrombottom():
@ -876,7 +878,8 @@ def _getbottomframe():
raise 'spam'
except:
pass
frame = sys.exc_traceback.tb_frame
tb = sys.exc_info()[2]
frame = tb.tb_frame
while 1:
if frame.f_code.co_name == 'mainloop' or frame.f_back is None:
break

View File

@ -1212,7 +1212,7 @@ def execstring(pytext, globals, locals, filename="<string>", debugging=0,
except:
if debugging:
sys.settrace(None)
PyDebugger.postmortem(sys.exc_type, sys.exc_value, sys.exc_traceback)
PyDebugger.postmortem(*sys.exc_info())
return
else:
tracebackwindow.traceback(1, filename)
@ -1289,7 +1289,6 @@ class _EditorDefaultSettings:
settings = FontSettings.FontDialog(self.fontsettings, self.tabsettings)
if settings:
self.fontsettings, self.tabsettings = settings
sys.exc_traceback = None
self.w.fonttext.set(self.template % (self.fontsettings[0], self.fontsettings[2]))
def close(self):
@ -1327,7 +1326,6 @@ def geteditorprefs():
fontsettings = prefs.pyedit.fontsettings = ("Geneva", 0, 10, (0, 0, 0))
tabsettings = prefs.pyedit.tabsettings = (8, 1)
windowsize = prefs.pyedit.windowsize = (500, 250)
sys.exc_traceback = None
return fontsettings, tabsettings, windowsize
def seteditorprefs(fontsettings, tabsettings, windowsize):

View File

@ -179,10 +179,6 @@ sys_exc_clear(PyObject *self, PyObject *noargs)
Py_XDECREF(tmp_type);
Py_XDECREF(tmp_value);
Py_XDECREF(tmp_tb);
/* For b/w compatibility */
PySys_SetObject("exc_type", Py_None);
PySys_SetObject("exc_value", Py_None);
PySys_SetObject("exc_traceback", Py_None);
Py_INCREF(Py_None);
return Py_None;
}

View File

@ -27,7 +27,7 @@ try:
except SystemExit, n:
sys.exit(n)
except:
t, v, tb = sys.exc_type, sys.exc_value, sys.exc_traceback
t, v, tb = sys.exc_info()
print
import cgi
cgi.print_exception(t, v, tb)