Если посмотреть на CPython tokenizer.c
, токенайзер возвращает определенные сообщения об ошибках.
В качестве примера вы можете взглянуть на часть, в которой токенизатор пытается разобрать десятичное число . При попытке анализа числа 5_6
все должно быть в порядке, но при попытке анализа числа 5__6
токенизатор должен вернуть ошибку SyntaxError с сообщением «недопустимый десятичный литерал»:
static int
tok_decimal_tail(struct tok_state *tok)
{
int c;
while (1) {
do {
c = tok_nextc(tok);
} while (isdigit(c));
if (c != '_') {
break;
}
c = tok_nextc(tok);
if (!isdigit(c)) {
tok_backup(tok, c);
syntaxerror(tok, "invalid decimal literal");
return 0;
}
}
return c;
}
Используя Python, я попытался дозвониться до сообщения SyntaxError
токенизатора:
In [12]: try:
...: eval('5__6')
...: except SyntaxError as e:
...: print(e.args, e.filename, e.lineno, e.msg, e.text)
('invalid token', ('<string>', 1, 2, '5__6')) <string> 1 invalid token 5__6
Есть ли способ извлечь сообщение SyntaxError из токенизатора?