Source code for penman.exceptions
# -*- coding: utf-8 -*-
from typing import Optional
[docs]
class DecodeError(PenmanError):
"""Raised on PENMAN syntax errors."""
def __init__(
self,
message: Optional[str] = None,
filename: Optional[str] = None,
lineno: Optional[int] = None,
offset: Optional[int] = None,
text: Optional[str] = None,
):
self.message = message
self.filename = filename
self.lineno = lineno
self.offset = offset
self.text = text
def __str__(self):
parts = []
if self.filename is not None:
parts.append(f'File "{self.filename}"')
if self.lineno is not None:
parts.append(f'line {self.lineno}')
if parts:
parts = ['', ' ' + ', '.join(parts)]
if self.text is not None:
parts.append(' ' + self.text)
if self.offset is not None:
parts.append(' ' + (' ' * self.offset) + '^')
elif parts:
parts[-1] += f', character {self.offset}'
if self.message is not None:
name = self.__class__.__name__
parts.append(f'{name}: {self.message}')
return '\n'.join(parts)