如何解决TRY 。。。EXCEPT问题?

wzs 2000-09-06 10:55:00
我自己编一个函数判断是DATE有效时却不执行EXCEPT中的语句这是为何大侠帮我吧!!

函数:
function chk_date_valid(str:string):boolean;
var
TempDate: TDateTime;
begin
try
TempDate := StrToDateTime(str);
result:=true;
except
on EConvertError do
result:=false;
end;
end;

调用时:

if chk_date_valid(maskedit1.text) then ...{这时maskedit1.text=' - - '}或='2000-13-13'等等它只执行到tempdate:=strtodatetime(str)就报错而不跑到EXCEPT中去这是为何?
错误显示:
project rs_system.exe raised exception class Econverterror with message" - - "is not a valid date and time'.process stopped.use step or run to continue.

...全文
403 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzs 2000-09-06
  • 打赏
  • 举报
回复
附加一道题:
如何自动获取错误的代码及错误代码信息?就VB一样智能型的
在VB中只需要用它的ERR对象就能自动识别你程序错的原因(如:err.code就能获取错误的代码)
Sayhigh 2000-09-06
  • 打赏
  • 举报
回复
不会吧你在Except后面加一个Showmessage,把Onxxx注释一下,看看行不行
function chk_date_valid(str:string):boolean;
begin
try
result:=true;
StrToDateTime(str);
except
showmessage('Date Error');
result:=false;
end;
end;

JGTM2000 2000-09-06
  • 打赏
  • 举报
回复
ChDw的答案是对的,你脱离Delphi运行该程序就会执行到Exception里面。仔细看看Debugger的相关选项,很灵活的处理这类问题。另外,有些Exception类有ErrorCode和Message,你可以这样用:

try
//...
except
On ECE: EConvertError do
ShowMessage(ECE.ClassName+': '+ECE.Message);
On EWE: EWin32Error do
ShowMessageFmt('%s[%d]: %s',[EWE.ClassName,EWE.ErrorCode,ECE.Message);
end;
Pardo 2000-09-06
  • 打赏
  • 举报
回复
利用函数StrToDate()转换自身的错误捕捉

procedure TForm1.DateEditExit(Sender: TObject);
begin
//利用函数转换的错误捕捉来处理...
if DateEdit1.Text<>'' then
begin
try
StrToDate(DateEdit1.Text);//转换
except
DateEdit1.SetFocus;
MessageBeep(0);
raise Exception.Create('"'+DateEdit1.Text+'" 不是正确的日期格式!');
end{try};
DateEdit1.Text:=DateToStr(StrToDate(DateEdit1.Text));
end{if};
end;
sky__horse 2000-09-06
  • 打赏
  • 举报
回复
好像和"瘟豆柿"的日期格式有关,也许"瘟豆柿"的某个日期格式下你的写法可以用?
很久以前碰到过这个问题,不妨414
ChDw 2000-09-06
  • 打赏
  • 举报
回复
那个提示应该是Delphi调试过程中拦截下来的,你在Delphi的Language Exception中应该
可以找到Stop on Delphi Exception的选项,把它去掉就可以了
dragongong 2000-09-06
  • 打赏
  • 举报
回复
strtodatetime在sysutils中的说明:

function StrToDateTime(const S: string): TDateTime;
var
Pos: Integer;
Date, Time: TDateTime;
begin
Pos := 1;
Time := 0;
if not ScanDate(S, Pos, Date) or not ((Pos > Length(S)) or
ScanTime(S, Pos, Time)) then
begin // Try time only
Pos := 1;
if not ScanTime(S, Pos, Result) or (Pos <= Length(S)) then
ConvertErrorFmt(@SInvalidDateTime, [S]);
end else
if Date >= 0 then
Result := Date + Time else
Result := Date - Time;
end;
你可以直接使用scanDate, scantime检查
本课程采用了漫画+动手实操+练习讲授Python编程技能。课程简介:第6章 容器类型数据6.1 序列6.1.1 序列的索引操作6.1.2 加与乘操作6.1.3 切片操作6.1.4 成员测试6.2 列表6.2.1 创建列表6.2.2 追加元素6.2.3 插入元素6.2.4 替换元素6.2.5 删除元素6.3 元组6.3.1 创建元组6.3.2 元组拆包6.4 集合6.4.1 创建集合6.4.2 修改集合6.5 字典6.5.1 创建字典6.5.2 修改字典6.5.3 访问字典视图6.6 动动手 —— 遍历字典6.7 练一练第7章 字符串7.1 字符串的表示方式7.1.1 普通字符串7.1.2 原始字符串7.1.3 长字符串7.2 字符串与数字的相互转换7.2.1 将字符串转换为数字7.2.2 将数字转换为字符串7.3 格式化字符串7.3.1 使用占位符7.3.2 格式化控制符7.4 操作字符串7.4.1 字符串查找7.4.2 字符串替换7.4.3 字符串分割7.5 动动手 —— 统计英文文章中单词出现的频率7.6 练一练第8章 函数8.1 定义函数8.2 调用函数8.2.1 使用位置参数调用函数8.2.2 使用关键字参数调用函数8.3 参数的默认值8.4 可变参数8.4.1 基于元组的可变参数( *可变参数)8.4.2 基于字典的可变参数( **可变参数)8.5 函数中变量的作用域8.6 函数类型8.6.1 理解函数类型8.6.2 过滤函数filter()8.6.3 映射函数map()8.7 lambda()函数8.8 动动手 —— 使用更多的lambda()函数8.9 练一练第9章 类与对象9.1 面向对象9.2 定义类9.3 创建对象9.4 类的成员9.4.1 实例变量9.4.2 构造方法9.4.3 实例方法9.4.4 类变量19.5 封装9.5.1 私有变量9.5.2 私有方法9.5.3 使用属性9.6 继承性9.6.1 Python中的继承9.6.2 多继承9.6.3 重写方法9.7 多态性9.7.1 继承与多态9.7.2 鸭子类型测试与多态9.8 练一练第10章 异常处理9.8 练一练10.1 第一个异常 —— 除零异常10.2 捕获异常110.2.1 try-except语句10.2.2 多个except代码块10.2.3 多重异常捕获10.2.4 try-except语句嵌套10.3 使用finally代码块释放资源10.4 自定义异常类10.5 动动手 —— 手动引发异常10.6 练一练

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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