创新源于智慧,智慧源于勤奋点击与我进行在线交流

Green1原创空间

海纳百川,有容乃大


公告

四川理工学院信息管理与信息系统专业学生,男,83年5月生。

职业:自由开发者

为人座右铭:做人要厚道

QQ:61951565 

VFP群:4001858(已满员),17966472

E-mail:lugreen@163.com

QQ空间:Greeeeeeeeeeeeeen

本博客文章未经作者同意不得转载


我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:Green1Vfp 原创空间
日志总数:35
评论数量:101
留言数量:3
访问次数:444582
建立时间:2004年12月7日




[高级技巧]vfp中的结构化错误处理(个人翻译)
原创空间,  软件技术

Green1 发表于 2005/3/16 20:48:19  VFP QQ群:4001858 VFP UC团体:4363524 欢迎您的加入

vfp中的结构化错误处理 (Structured Error Handling) 翻译: 吕国瑞 地址: 四川理工学院 电话: 0813-5506124 QQ: 61951565 日期: 2005-03-16 你可以将try...catch...finally作为控制结构(像if...else...endif)使用去处理在你的代码运行时可能产生的错误和意外。try...catch...finally结构包含try,catch,和finally代码块,这样你可以指定可能产生错误的语句,处理错误的语句,和完成清理操作的语句。 try...catch...finally结构以try语句开始,try语句标志着TRY块的开始。在TRY块中你可以指定运行时可能产生错误的代码。如果你的TRY块顺利地执行完,并没有错误或意外产生,程序将跳过CATCH块并寻找距TRY...CATCH...ENDTRY结构最近的FINALLY块,如果它存在,就执行FINALLY块中的语句。如果FINALLY块不存在,程序将执行TRY...CATCH...FINALLY结构外,即ENDTRYR后面的第一条语句。ENDTRY标志着TRY...CATCH...FINALLY结构的结束。 说明: VFP允许不含CATCH和FINALLY块的TRY...CATCH...FINALLY结构存在。这时,结构会把错误上报给更高一级的错误处理。 你也可以将一个TRY...CATCH...FINALLY结构嵌套进TRY,CATCH,或FINALLY块。 下列几部分描述你可以在那些代码块中执行的错误处理任务。 发生错误 捕捉错误 上报错误 立即退出TRY...CATCH...FINALLY结构 在TRY...CATCH...FINALLY结构中使用命令 运行FINALLY语句 发生错误 当有错误发生在TRY块中的下列位置时VFP将产生或“抛出”一个意外并创建一个意外对象(Exception object),这个错误对象包含了关于那个错误的一些 细节信息。 一行代码。这行代码包含对外部过程的调用,这个外部过程包含错误但它没有自身的错误处理部分。 一个含有错误的对象的方法的调用,那个对象没有自己的ERROR事件代码。另外,如果ERROR事件代存在,那个对象的ERROR事件只有在对象的方法不包含TRY...CATCH...FINALLY时才处理错误。(Otherwise, if Error event code exists, the Error event for that object handles the error unless the method contains its own TRY...CATCH...FINALLY error handler. ) 说明: You cannot run code when the Exception object is created. The Exception object created always exists as an instance of the Exception base class. If you want to use a subclass of the Exception class, you should rethrow the exception in the CATCH or FINALLY block. Only Visual FoxPro program (.prg) files support Exception objects, though you can throw exceptions from forms run in the design environment. You cannot throw Exception objects from COM objects in dynamic-link library (.dll) files or executable (.exe) files. 错误发生后,VFP通过转到第一个CATCH语句去处理或“捕捉”意外并在CATCH块中寻找合适的语句去处理意外。 捕捉意外 程序查看出现在catch块中的语句序列。如果发现可以处理意外的CATCH语句,程序将执行对应的代码。 CATCH语句可以包含可选的TO和WHEN出子句。你可以通过指定TO子句中的VarName参数存储对意外对象(Exception Object)的引用。如果你想使CATCH块有条件运行,你可以在WHEN子句指定逻辑表达式,只有在WHEN条件表达式计算值为真时才执行CATCH块。CATCH语句类似于CASE语句,因此WHEN子句必须为一个逻辑表达式。如果TO和WHEN子句不存在,CATCH语句将以CATCH WHEN .T.执行。 程序执行了CATCH块中的一个语句序列后就不会再返回到TRY语句,也不再查找其它CATCH语句。而是直接转到FINALLY语句(如果FINALLY语句存在)执行FINALLY块中的代码。否则,程序将退出TRY...CATCH...FINALLY结构并立即转到ENDTRY后面的语句。 上报错误 如果你想要将错误上报或“抛”给更高一级的错误处理,你可以使用THROW语句。你可以在TRY...CATCH...FINALLY结构中的任何代码块调用THROW.你可以在含有捕捉意外的错误处理的代码的任何地方使用THROW。但你不能在命令窗口(COMMAND WINDOW)中使用THROW。 警告: 在TYR...CATCH...FINALLY结构外调用了THROW命令,但没有合适的错误处理子句,你的程序将退出。 当在TRY...CATCH区域之外使用THROW,抛出的意外由ON ERROR例程或VFP系统的EVENT事件处理,错误处理完后不会返回到THROW发生的地方。下列展示代码行 ?22不会执行。这种错误处理行为不同于传统的处理行为,传统错误处理行为在处理完错误后会返回到错误发生的地方。 ON ERROR ? ERROR()DO myProc1PROCEDURE myProc1?1THROW 11?2&&&将不执行ENDPROC 记住,调用THROW的目的是将意外上报给更高一级的错误处理。 如果在一个TRHOW语句外层存在TRY...CATCH块,当THROW语句在CATCH或FINALLY块中被调用时,VFP会重新给在TO子句中指定的内存变量分配由被抛出的意外创建的最新这意外对象引用。如果外层不存在TRY...CATCH结构,VFP会意外抛给ON ERROR例程或一个ERROR事件,当然这是在ON ERROR例程或ERROW事件存在的前提下。否则,VFP会显示适当的错误信息。 立即退出TRY...CATCH...FINALLY 你可以在TRY或CATHC块中包含EXIT语句以立即退出代码块。退出TRY或CATCH块后程序将执行FINALLY语句,如果它存在的话。如果不存在FINALLY语句,程序将直接转到ENDTRY语句后。 在TRY...CATHC...FINALLY结构中使用命令 你可以在TRY或CATCH块中使用可以影响代码正常运行的不同的VFP命令,你果你使用了不允许出现在指定块中的命令,在运行时VFP会产生一个错误。FINALLY语句总是在处理这些命令前运行,除使用CANCEL或QUIT外。下面的列表显示了你可以在TYR,CATCH或FINALLY块中使用的命令。 Command TRY CATCH FINALLY CANCEL Yes Yes Yes CLEAR ALL Yes No No CLOSE ALL Yes Yes Yes DOEVENTS Yes Yes Yes ERROR Yes Yes Yes EXIT Yes Yes Yes LOOP No No No QUIT Yes Yes Yes RELEASE Yes Yes Yes RESUME Yes Yes Yes RETRY No No No RETURN No No No RETURN TO MASTER No No No RETURN TO <ProcedureName> No No No SET STEP ON Yes Yes Yes SUSPEND Yes Yes Yes THROW Yes Yes Yes 说明: You can include commands such as LOOP in a block as long as you place it inside an embedded control statement such as FOR EACH...ENDOR or DO WHILE...ENDDO. You can call the ERROR command from the TRY, CATCH, or FINALLY blocks. TRY...CATCH...FINALLY handles the ERROR command like any other exception or use of the THROW command. 执行FINALLY语句 如果程序找到FINALLY语句,它将执行FINALLY块中的语句。FINALLY块常常用来清理在TRY块中分配的任何资源并且TRY块在程序离开TRY...CATCH...FINALLY结构前最后执行的代码。 FINALLY块总要在意外,发生时执行,即使其它的意外处理,像ON ERROR例程或ERROR事件有效。 (The FINALLY block always runs when an exception, unhandled or otherwise, occurs, even if another exception handler such as the ON ERROR routine or an object's Error event is in effect. ) 说明: 你不能简单地直接把程序的控制转到CATCH或FINALLY块。如果FINALLY语句存在的话,你不能绕过它,除非你使用CANCEL使命中止程序的运行。如果你想绕过FINALLY语句,你需要在FINALLY块的开始位置加上检测条件。 FINALLY块执行后,程序立即执行ENDTRY后面的语句。ENDTRY语句标志TRY...CATCH...ENDCATCH结构的结束。


阅读全文(4742) | 回复(1) | 编辑 | 精华点击这里给我发消息

 


回复:vfp中的结构化错误处理(个人翻译)
原创空间,  软件技术

lvguorui(游客)发表评论于2007/6/22 22:31:41  VFP QQ群:4001858 VFP UC团体:4363524 欢迎您的加入

吕国瑞 男 85年5月19日生 毕业江西蓝天学院电子商务、计算机网络工程 VFP?看不懂。只看懂了 吕国瑞!嘿嘿    


个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除点击这里给我发消息

 


» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.516 second(s), page refreshed 144805566 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号