有没有类似于PHP中try catch的方法?try catch in progress
try {
...
}
catch (Exception $e) {
...
}
我已经使用了这种类型的块:DO ON ERROR UNDO ...
,但我不知道是否有另一种方式来做到这一点。
谢谢。
有没有类似于PHP中try catch的方法?try catch in progress
try {
...
}
catch (Exception $e) {
...
}
我已经使用了这种类型的块:DO ON ERROR UNDO ...
,但我不知道是否有另一种方式来做到这一点。
谢谢。
是的。从版本11.2开始,有BLOCK-LEVEL ON ERROR UNDO, THROW.
语句可以更改整个程序的默认行为。 CATCH
已经有更长的时间了 - 从版本10.1C开始。
/* 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.
块级ON ERROR UNDO的完整描述,扔
从手册:
语法块级ON ERROR UNDO,扔掉。
此语句影响以下块类型:
外部过程的主块(.P)
内部程序
用户定义的函数
一类方法
类构造函数
属性访问
ON使用的块如数据库,创建,删除,写入或 分配事件
REPEAT块
FOR块
进行事务块
此语句不触发影响:
破坏者在单个非常规级别块中显式编码的错误指令
ON块是UI触发器。
注意这些替代块级ON ERROR UNDO,扔 声明:
,而不是添加语句源代码文件,你 可以使用-undothrow 2启动参数更改默认 无错误处理到UNDO,在编译期间受到 BLOCK-LEVEL语句影响的每个块的THROW。有关更多信息,请参阅“启动命令”和“ 参数参考”。如果您想要更改只在例程级别的 块中的默认错误处理,则可以使用THROW语句的ERROR UNDO,THROW语句的程序级别。 (您可以使用-undothrow 1启动参数更改默认 错误处理例行级模块撤消,期间 编译扔。)
妈的,我在10.1B和'块级'不被识别。 但我稍后保留此答案。非常感谢你。 :) – doydoy44
'THROW'和'CATCH'也不能识别。 :( – doydoy44
赶上实际添加在10.1C。太糟糕了。10.1B是从2007年,所以更新应该考虑。 – Jensd