(format_exception): New function.
(eexecfile): Use it instead of traceback.print_exception. Don't use execfile to avoid a bug in w32.
This commit is contained in:
parent
8ea81ae0ef
commit
ade817bdf2
2 changed files with 55 additions and 13 deletions
|
@ -1,3 +1,9 @@
|
|||
2007-04-04 Slawomir Nowaczyk <slawomir.nowaczyk.847@student.lu.se>
|
||||
|
||||
* emacs.py (format_exception): New function.
|
||||
(eexecfile): Use it instead of traceback.print_exception.
|
||||
Don't use execfile to avoid a bug in w32.
|
||||
|
||||
2007-04-04 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* MACHINES: Mention preprocessor to use with /opt/SUNWspro/bin/cc
|
||||
|
@ -367,7 +373,7 @@
|
|||
(section{TODO Items and Checkboxes}): Checkbox keys moved to this
|
||||
section, added documentation for the key `C-c #'.
|
||||
|
||||
2006-11-05 Slawomir Nowaczyk <slawek@cs.lth.se> (tiny change)
|
||||
2006-11-05 Slawomir Nowaczyk <slawek@cs.lth.se>
|
||||
|
||||
* emacs.py (eargs): Provide eldoc message for builtin types.
|
||||
Make sure eargs always outputs sentinel, to avoid Emacs freeze.
|
||||
|
@ -462,7 +468,7 @@
|
|||
(eimport): Use __main__ rather than `emacs' namespace.
|
||||
(modpath): New fun.
|
||||
|
||||
2006-08-20 Slawomir Nowaczyk <slawomir.nowaczyk.847@student.lu.se> (tiny change)
|
||||
2006-08-20 Slawomir Nowaczyk <slawomir.nowaczyk.847@student.lu.se>
|
||||
|
||||
* emacs.py (eexecfile): Use the __main__ rather than `emacs' namespace.
|
||||
|
||||
|
@ -725,8 +731,8 @@
|
|||
* pl-refcard.tex (section{Info}): Ditto. Translation suggested by
|
||||
Slawomir Nowaczyk <slawomir.nowaczyk.847@student.lu.se>.
|
||||
|
||||
* cs-refcard.tex (section{Info}): Use `s' instead of `M-s'. Entry
|
||||
for `i' is not translated yet.
|
||||
* cs-refcard.tex (section{Info}): Use `s' instead of `M-s'.
|
||||
Entry for `i' is not translated yet.
|
||||
|
||||
* pt-br-refcard.tex (section{Info}): Ditto.
|
||||
|
||||
|
@ -1455,7 +1461,7 @@
|
|||
|
||||
* NEWS: Lots of clarifications and cleanups.
|
||||
|
||||
2005-05-05 Slawomir Nowaczyk <slawek@cs.lth.se> (tiny change)
|
||||
2005-05-05 Slawomir Nowaczyk <slawek@cs.lth.se>
|
||||
|
||||
* TUTORIAL.pl: Updated header.
|
||||
|
||||
|
|
52
etc/emacs.py
52
etc/emacs.py
|
@ -25,20 +25,56 @@
|
|||
|
||||
__all__ = ["eexecfile", "eargs", "complete", "ehelp", "eimport", "modpath"]
|
||||
|
||||
def format_exception (filename, should_remove_self):
|
||||
type, value, tb = sys.exc_info ()
|
||||
sys.last_type = type
|
||||
sys.last_value = value
|
||||
sys.last_traceback = tb
|
||||
if type is SyntaxError:
|
||||
try: # parse the error message
|
||||
msg, (dummy_filename, lineno, offset, line) = value
|
||||
except:
|
||||
pass # Not the format we expect; leave it alone
|
||||
else:
|
||||
# Stuff in the right filename
|
||||
value = SyntaxError(msg, (filename, lineno, offset, line))
|
||||
sys.last_value = value
|
||||
res = traceback.format_exception_only (type, value)
|
||||
# There are some compilation errors which do not provide traceback so we
|
||||
# should not massage it.
|
||||
if should_remove_self:
|
||||
tblist = traceback.extract_tb (tb)
|
||||
del tblist[:1]
|
||||
res = traceback.format_list (tblist)
|
||||
if res:
|
||||
res.insert(0, "Traceback (most recent call last):\n")
|
||||
res[len(res):] = traceback.format_exception_only (type, value)
|
||||
# traceback.print_exception(type, value, tb)
|
||||
for line in res: print line,
|
||||
|
||||
def eexecfile (file):
|
||||
"""Execute FILE and then remove it.
|
||||
Execute the file within the __main__ namespace.
|
||||
If we get an exception, print a traceback with the top frame
|
||||
(ourselves) excluded."""
|
||||
# We cannot use real execfile since it has a bug where the file stays
|
||||
# locked forever (under w32) if SyntaxError occurs.
|
||||
# --- code based on code.py and PyShell.py.
|
||||
try:
|
||||
try: execfile (file, __main__.__dict__)
|
||||
except:
|
||||
(type, value, tb) = sys.exc_info ()
|
||||
# Lose the stack frame for this location.
|
||||
tb = tb.tb_next
|
||||
if tb is None: # print_exception won't do it
|
||||
print "Traceback (most recent call last):"
|
||||
traceback.print_exception (type, value, tb)
|
||||
try:
|
||||
source = open (file, "r").read()
|
||||
code = compile (source, file, "exec")
|
||||
# Other exceptions (shouldn't be any...) will (correctly) fall
|
||||
# through to "final".
|
||||
except (OverflowError, SyntaxError, ValueError):
|
||||
# FIXME: When can compile() raise anything else than
|
||||
# SyntaxError ????
|
||||
format_exception (file, False)
|
||||
return
|
||||
try:
|
||||
exec code in __main__.__dict__
|
||||
except:
|
||||
format_exception (file, True)
|
||||
finally:
|
||||
os.remove (file)
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue