Оператор throw сообщает об ошибке типа type, произошедшей по вине source, с комментарием comment.
Эта ошибка может быть перехвачена и обработана при помощи оператора try.
Не перехватывайте ошибки только для их красивого вывода, пусть этим централизованно займется метод unhandled_exception, вызываемый Parser если ни одного обработчика ошибки так и не будет найдено. Кроме прочего, произойдет запись в журнал ошибок веб-сервера, который можно регулярно просматривать на предмет имевших место проблем.
Пример
@method[command]
^switch[$command]{
^case[add]{
добавляем…
}
^case[delete]{
удаляем…
}
^case[DEFAULT]{
^throw[bad.command;$command;Wrong command $command, good are add&delete]
^rem{
допустим также следующий формат вызова оператора throw
^throw[
$.type[bad.command]
$.source[$command]
$.comment[Wrong command $command, good are add&delete]
]
}
}
}
@main[]
$action[format c:]
^try{
^method[$action]
}{
^if($exception.type eq bad.command){
$exception.handled(true)
Неправильная команда '$exception.source', задана
в файле $exception.file, в $exception.lineno строке.
}
}
Результатом работы примера будет
Неправильная команда 'format c:', задана
в файле c:/parser3tests/www/htdocs/throw.html, в 15 строке.
Обращаем ваше внимание на то, что пользователи вашего сайта не должны увидеть технические подробности в сообщениях об ошибках, тем более содержащие пути к файлам, это некрасиво и ненадежно.
Вывод $exception.file дан в качестве примера и настоятельно не рекомендуется к использованию на промышленных серверах - только для отладки.