Не удивительно, ON ERROR
имеет отношение к обработке ошибок. Вы должны прочитать об этом в интерактивной справке / руководстве, так как есть много способов, что делать.
DO - это просто блок. Без чего-либо еще это действительно мало что дает. В сочетании с такими операторами, как TRANSACTION
или ON ERROR
, это может сильно изменить ход вашей программы. Вам также следует проверить оператор NO-ERROR
. Это также влияет на обработку ошибок.
В приведенных ниже примерах я вынуждаю ошибку, пытаясь привести строку HELLO
к целому числу, это, конечно, не работает.
DO ON ERROR, RETRY
Это будет повторять блок в случае ошибки и для RETRY
задано значение true. Если вы не LEAVE
в RETRY
-блоке, у вас будет петля.
DO ON ERROR UNDO, RETRY:
IF RETRY THEN DO:
DISPLAY "RETRY".
/* Do some cleanup or what else */
LEAVE.
END.
i = INTEGER("HELLO").
END.
DO ON ERROR, THROW
A возможно большесовременный подход при использовании THROW
- CATCH
. Обратите внимание, что это также подавляет появление ошибки (немного похоже на NO-ERROR
).
DEFINE VARIABLE i AS INTEGER NO-UNDO.
DO ON ERROR UNDO, THROW:
i = INTEGER("HELLO").
END.
CATCH error AS Progress.Lang.Error :
MESSAGE "We had an error".
END CATCH.
DO:
Программа просто остановится при ошибке
DEFINE VARIABLE i AS INTEGER NO-UNDO.
DO:
i = INTEGER("HELLO").
END.