raise与异常(100分)

  • 主题发起人 主题发起人 千中元
  • 开始时间 开始时间

千中元

Unregistered / Unconfirmed
GUEST, unregistred user!
1)raise EsillyError.create('I love u');
EsillyError好象是随便给出的,不需要在别的地方声明--Y or N?
2).except
on e:exception do begin
-----e:后面:exception,不加具体的(比如除数为0),是不是更普遍些?
3)再次引发异常
on e:exception do
begin showmessage('something went wrong');
raise;
end;
charlie说:“大多数时候,你不希望显示这两条错误消息”
   ”如果你确实需要编写try..exept 块来逐步进行该过程,那么你
    应该考虑再引发异常,以防一些其他的例程需要知道它“
-----如果不是显示两条错误信息,那么“再次”引发是个什么概念呢?
4)很常见的
Database1.Rollback;
   raise

   但不知道raise在这里扮演什么角色?如果没有的话,会导致什么后果?

    
     

 
老千一大早就赶来,佩服!
我只能:
listen
 
开始睡觉。不回宿舍了。
 
//water 千中元

1)肯定要声明的,你仔细找找
2)你想捕捉具体异常就具体点,不想就不用具体
3)用了try..except自己把异常处理了,系统将无法处理之.你想显示系统的异常信息
又想有try..except做写自己的事,就要这么做了
4)这里可能就在一个try..except结构里面,把异常再触发,让系统处理
 
kang,太虚,可能有错误,不满意的说,提前:)
 
这么快就醒了?

* 你是想创建一个自己的异常,应该这样:
type
EMyError=class(Exception)
private
FErrorCode:integer;
public
property errorcode:integer read FErrorCode write FErrorCode;
constructor create(const msg:string;ErrorCode:integer);
end;
....
constructor EMyError.create(const msg:string;ErrorCode:integer);
begin
inherited create(msg);
FErrorCode:=ErrorCode;
end;
...
引发异常:
Raise EMyError.create('.....',ErrorCode);


* 如果你只用on E:exception do 的话,这个异常处理就没有意义了,可以
这样:
except
on E:Exception do
begin
if E is EDivByZero do...
if E is EOutOfMemory do...
end


* :
delphi的帮助说(我那本charlie的书被人借走了):
Re-raising is useful when a procedure or function has to clean up after an exception occurs
but cannot fully handle the exception.
当过程想在异常发生后清理现场而又无力完全处理时,就用Raise交由系统完成

*:
完整的话大概象这个样子:
try
...
except
Database1.Rollback;
   raise

end

道理同上

另:谢谢你给我的OICQ



 
1 应该有申明,可能在其他Unit;
2 是更普遍,但这有违On Exception的初衷,本来用这个就是要具体判断异常的
类的,当然根据需要可以将某一类的异常用他们的父类来判断。
3 有时候需要这样。比如在DBTable.OnPostException中,当为键值重复时,你自
己处理;而当输入类型错时,你可能不想处理,而直接显示信息;或当出现未知异常时,
也可能用raise.
4 不太清楚.
 
wql,你看看第四章 myexcept的代码,是我漏了?
BTW:你的号码是多少?
 
raise EsillyError.create('I love u');
EsillyError好象是随便给出的,不需要在别的地方声明--Y or N?
-----真的找不到声明!
请看技术内幕第四章 myexcept的代码
 
你试试自己随便写一个?
 
我的号是9267628
不知过两天去了别处能不能继续用这个号?
charlie那本书让人借走了,一直没还
 
千中元﹐你現在廣州什么地方﹐我在東莞的一家工廠做三層﹐DELPHI+SQLSERVER﹐

寫程式寫的累死了。你的CALL機號沒變吧?
 
后退
顶部