En Wed, 07 Apr 2010 17:23:22 -0300, kwatch <kwa...@gmail.com> escribió:

Is it possible to raise exception with custom traceback to specify
file and line?
I'm creating a certain parser.
I want to report syntax error with the same format as other exception.
-------------------------
1: def parse(filename):
2:     if something_is_wrong():
3:         linenum = 123
4:         raise Exception("syntax error on %s, line %s" % (filename,
linenum))
5:
6: parse('example.file')
-------------------------

my hope is:
-------------------------
Traceback (most recent call last):
  File "/tmp/parser.py", line 6, in <module>
    parse('example.file')
  File "/tmp/parser.py", line 4, in parse
    raise Exception("syntax error on %s, line %s" % (filename,
linenum))
  File "/tmp/example.file", line 123
    foreach item in items   # wrong syntax line
Exception: syntax error
-------------------------

The built-in SyntaxError exception does what you want. Constructor parameters are undocumented, but they're as follows:

raise SyntaxError("A descriptive error message", (filename, linenum, colnum, source_line))

colnum is used to place the ^ symbol (10 in this fake example). Output:

Traceback (most recent call last):
  File "1.py", line 9, in <module>
    foo()
  File "1.py", line 7, in foo
raise SyntaxError("A descriptive error message", (filename, linenum, colnum, "this is line 123 in example.file"))
  File "example.file", line 123
    this is line 123 in example.file
             ^
SyntaxError: A descriptive error message

--
Gabriel Genellina

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to