How To Get The Line Number Of An Error From Exec Or Execfile In Python
Let's say I have the following multi-line string: cmd = ''' a = 1 + 1 b = [ 2 + 2, 4 + 4, ] bork bork bork ''' and I want to execute it in a particul
Solution 1:
For syntax errors, the source line number is available as the lineno
flag on the exception object itself, in your case stored in err
. This is specific to syntax errors where the line number is an integral part of the error:
>>>cmd = """...1 \ +...2 * "...""">>>try:...exec cmd...except SyntaxError as err:...print err.lineno...
2
If you want to also handle other errors, add a new except
block except Exception, err
, and use the traceback
module to compute the line number for the runtime error.
import sys
import traceback
classInterpreterError(Exception): passdefmy_exec(cmd, globals=None, locals=None, description='source string'):
try:
exec(cmd, globals, locals)
except SyntaxError as err:
error_class = err.__class__.__name__
detail = err.args[0]
line_number = err.lineno
except Exception as err:
error_class = err.__class__.__name__
detail = err.args[0]
cl, exc, tb = sys.exc_info()
line_number = traceback.extract_tb(tb)[-1][1]
else:
returnraise InterpreterError("%s at line %d of %s: %s" % (error_class, line_number, description, detail))
Examples:
>>>my_exec("1+1") # no exception>>>>>>my_exec("1+1\nbork")...
InterpreterError: NameError at line 2 of source string: name 'bork' is not defined
>>>>>>my_exec("1+1\nbork bork bork")...
InterpreterError: SyntaxError at line 2 of source string: invalid syntax
>>>>>>my_exec("1+1\n'''")...
InterpreterError: SyntaxError at line 2 of source string: EOF while scanning triple-quoted string
Post a Comment for "How To Get The Line Number Of An Error From Exec Or Execfile In Python"