是否有类似于php中的try catch的方法?
try {
...
}
catch (Exception $e) {
...
}
我已经使用过这种类型的块:DO ON ERROR UNDO ...
但是我想知道是否还有其他方法可以做到。
感谢。
答案 0 :(得分:3)
是。从版本11.2开始,BLOCK-LEVEL ON ERROR UNDO, THROW.
语句会更改整个程序的默认行为。从版本10.1C开始,CATCH
已存在更长时间。
/* Must be first line of program */
BLOCK-LEVEL ON ERROR UNDO, THROW.
DEFINE VARIABLE i AS INTEGER NO-UNDO.
i = INTEGER("Hello").
CATCH err AS Progress.Lang.Error:
MESSAGE "Error: " err:GetMessage(1)
VIEW-AS ALERT-BOX ERROR.
END.
带有错误的旧式程序,例如取自Progress KnowledgeBase。
的示例DO ON ERROR UNDO, THROW:
/* The following line raises error (138) which is diverted to a Progress.Lang.SysError object and thrown to the main block. */
FIND Customer 1000.
END.
CATCH eAnyError AS Progress.Lang.Error:
MESSAGE
"Error Number:~t" eAnyError:GetMessageNum(1) "~n"
"Error Text:~t" eAnyError:GetMessage(1)
VIEW-AS ALERT-BOX BUTTONS OK TITLE "Error processing in the CATCH for mainprocedure block".
END CATCH.
关于错误的BLOCK-LEVEL的完整描述,然后
从手册:
语法BLOCK-LEVEL ON ERROR UNDO,THROW。
此语句会影响以下块类型:
外部程序的主要块(.p)
内部程序
用户定义的函数
班级方法
类构造函数
属性访问者
使用CREATE,DELETE,WRITE或作为数据库触发器的ON块 ASSIGN活动
REPEAT阻止
FOR blocks
DO TRANSACTION阻止
本声明不影响:
破坏者在单个非例程级块中显式编码的错误指令
ON块是UI触发器。
注意这些替代BLOCK-LEVEL ON ERROR UNDO,THROW 声明:
你没有将语句添加到源代码文件中 可以使用-undothrow 2启动参数来更改默认值 对UNDO的错误处理,对每个受到影响的块都是错误的 编译期间的BLOCK-LEVEL语句。请参阅启动命令和 参数参考了解更多信息。ROUTINE-LEVEL ON ERROR UNDO,THROW语句可用于你 想要仅在例程级别更改默认错误处理 块。 (您可以使用-undothrow 1启动参数来更改 例程级别块上的默认错误处理到UNDO,THROW期间 编译。)