raise exception with fake filename and linenumber

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Mon Apr 12 20:23:53 CEST 2010


En Fri, 09 Apr 2010 23:19:48 -0300, kwatch <kwatch at gmail.com> escribió:

> On 4月8日, 午後12:52, "Gabriel Genellina" <gagsl-... at yahoo.com.ar> wrote:
>>
>> 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
>>
>
> By the way, is it hard to specify any other exception class instead of
> SyntaxError?
> The SyntaxError class is a good solution in my case, but if possible,
> I want to know
> more general solution to specify filename and linenum for exception.

You can always store any info you want in the exception object, just write  
__str__ accordingly.
The advantage of SyntaxError is that it is special-cased in the  
interpreter itself as to add some spaces and the ^ character.
The disadvantages are already pointed out by Dennis Lee Bieber and aren't  
minor.

-- 
Gabriel Genellina




More information about the Python-list mailing list