try ... excetpt on e:Exception do 中的 E 是哪里来的?凭空出来的?怎么没在帮助里面找到说明?E是继承某个类么?这里只有 E.MESSAGE,

changechange 2005-10-28 11:06:41
先申明,我不是 DELPHI 的三星,达到3星后各个板块的级别都一样的。在 DELPHI 里面我只是个新手,只学了DELPHI 8天,希望大家帮忙

try ... excetpt on e:Exception do 中的 E 是哪里来的?凭空出来的?怎么没在帮助里面找到说明?E是继承某个类么?这里只有 E.MESSAGE,难道没有错误号么?


我如何根据 E 的类型获取了某个类型错误后继续判定错误号?毕竟一种类型中有很多个错误了,我需要针对不同的错误返回给客户不同的消息。
...全文
1322 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
FigoZhu 2005-10-31
  • 打赏
  • 举报
回复
真是高人啊~~~
亮剑_ 2005-10-31
  • 打赏
  • 举报
回复
如果在except中不要区分不同种类的异常,不写这个E也是可以的。
try
...
except
ShowMessage(Exception(ExceptObject).Message);
end;
sdzeng 2005-10-31
  • 打赏
  • 举报
回复
帮助里有讲过:
=========================================
Try...except statements

Topic groups See also

....

An exception handler can specify an identifier before the name of the exception class. This declares the identifier to represent the exception object during execution of the statement that follows on...do. The scope of the identifier is limited to that statement. For example,

try

...
except
on E: Exception do ErrorDialog(E.Message, E.HelpContext);
end;
zousoft 2005-10-30
  • 打赏
  • 举报
回复
try ... excetpt on e:Exception do

e只是你自己起的一个局部变量名,Exception是他的类型,很奇怪虽然Exception也是一个类,但是它不以T开头,可能也是为了强调他的特殊性。

你可以看看Exception的定义代码,它被定义在SysUtils单元里,里面除了Exception之外还有很多具体的异常类,他们都是以Exception为直接或间接父类的。Exception中有一大堆构造函数,似乎实际应用中很少有人直接调用,常用的其实就是两个公有属性HelpContext和Message。其他的异常类只是再他基础上又加了一些特定的属性。

具体delphi是如何再出现异常时调用Exception,以及构造函数的选择就不清楚了,似乎是一些比较底层和深奥的知识了。。。
changechange 2005-10-30
  • 打赏
  • 举报
回复
ok,非常感谢各位帮助,了解了。

这些内容估计书上也不会讲到,呵呵
ly_liuyang 2005-10-29
  • 打赏
  • 举报
回复
这是Delphi的语法
觉得没什么好解析的
呵呵,又或者是我不懂吧

_____________________
http://lysoft.7u7.net
aiirii 2005-10-29
  • 打赏
  • 举报
回复
>>我如何根据 E 的类型获取了某个类型错误后继续判定错误号?毕竟一种类型中有很多个错误了

我不知道你比较擅长什么语言,其实,这个结构都类似,在C++, C#, java 中都类似
比较严谨的写法,应该是:

try
{ calculation statements }
except
on EZeroDivide do ...
on EIntOverflow do ...
on EIntUnderflow do ...
end;

细化出错的类型,然后,根据不同的错误,再做不同的处理或提示,
但通常,我们为了方便,就直接用其基类,Exception 这样,就可捕获到所有的错误(其实不是所有).

但我看过许多人的代码,包括我自己,一般都是用
try ... excetpt on e:Exception do
这个定式而已,
如需要,就直接 ShowMessage(E.message) 告诉用户出错的信息

如果你的一个function 或 procedure 里面有多个步骤,那一般我会分开

...
try ... excetpt on e:Exception do
begin
dosomeing;
exit;
end;

...
try ... excetpt on e:Exception do
begin
dosomeing;
exit;
end;
...

这样分开不同步骤的可能错误,我觉得,看你在编写什么类型的程序,如果是类库,一般只是直接 raise 出去, 如果是界面,一般是自己定义的,如“无法连接到数据库, ...”, “无法打开文件,请查询...", 给用户太精确的出错信息也没意义
aiirii 2005-10-29
  • 打赏
  • 举报
回复
你说的e,
就好像 var I: integer; 一样,声明一个变量而已

你当然可以 on abc: exception 也可,目的是声明一个 exception 变量
78hgdong 2005-10-29
  • 打赏
  • 举报
回复
e好像是一存储错误信息的容器
lovendII 2005-10-28
  • 打赏
  • 举报
回复
我只知道,e就是异常Exception的简写,e.message就是详细的异常信息。

你也可以这样写 ex : Exception ,然后ex.message来表示异常信息。

三星太耀眼了,我眼睛都睁不开了。呵呵。

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧