了解Python中的raise语句,首先应明白其配置为引发意外。
一旦口头raise语句,程序会立刻停止以后流程,转向执基慎行后续的意外解决代码。
此环节不容漠视,是Python意外治理的主要元素。
raise的基本语法如下:其中,Exception代表规范意外之一,args则为自定义意外参数。
经常使用时,间接在须要抛出意外的中央调用raise,前面跟上详细的意外类或参数。
上方是几个实例来直观展现raise的用法:示例1:创立自定义意外类实例代码如下,定义一个名为CustomError的意外类:留意:在捕捉意外时,except语句须要接纳与raise抛出异毁锋樱常相反类或字符串的参数,以成功纤丛正确的意外解决。
经过上述实例,咱们可以明晰地看到raise语句在引发意外时的繁复运行。
正当应用raise,可以协助咱们更有效地启动失误会决和控制流程,是Python编程中无法或缺的一局部。
上方的代码同时经常使用了意外照应和意外包全橡亮好 意外响运行于设置变量的值 意外包全用于监禁资源 当意外照应完结时应用raise重引发一个以后意外
APointer: Pointer ;
AInt ADiv: Integer;
GetMem ( APointer )
AInt := div ADiv ;
on EDivByZero do
FreeMem ( APointer )
上方一段代码表现了意外解决的嵌套 意外包全 意外照应可以独自嵌套也可以如上例所示的那样相互嵌套
自定义意外类的运行
应用Delphi的意外类机制咱们可以定义自己的意外类来解决程序口头中的意外状况 同规范意外不同的是 这种意外状况并不是相关于系统的反常运转 而是运行程序的预设定形态 比如输入一个合法的口令 输入数据值超出设定范畴 计算结果偏离估量值等等
经常使用自定义意外须要
自己定义一个意外对象类
自己引发一个意外
定义意外对象类
意外是对象 所以定义一类新的意外同定义一个新的对象类型并无太大区别 因为缺省意外解决只解决从Exception或Exception子类承袭的对象 因此自定义意外类应该作为Exception或其它规范意外类的子类 这样 假设在一个模块中引发了一个新定义的意外 而这个模块并没有蕴含对应的意外照应 则缺省意外解决机制将照应该意外 显示一个蕴含意外类称号和失误信息的信息框
上方是一个意外类的定义
EMyException = Class(Exception) ;
自引发意外
引发一个意外 调用保管字raise 后边跟一个意外类的实例
假设定义
EPasswordInvalid = Class(Exception)键陵
则在程序中如下的语句将引发一个EPasswordInvalid意外
If Password <> CorrectPassword then
raise EPasswordInvalid Create( Incorrect Password entered )
意外发生时把System库单元中定义的变量ErrorAddr的值置为运行程序发生意外处的地址 在你的意外解决环节中可以援用ErrorAddr的值
在自己引发一个意外时 雷同可认为ErrorAddr调配一个值
为意外调配一个失误地址须要经常使用保管字at 经常使用格局如下
raise EInstance at Address_Expession;
自定义意外的运行举例
上方咱们给出一个应用自定义意外编程的完整实例
两个标签框(Label Label )标示对应编辑框的配置 编辑框PassWord和InputEdit用于输入口令和数字 程序启动时Label InputEdit无法见 当在PassWord中输入正确的口令时 Label InputBox出如今屏幕上 此时Label PassWord暗藏
设计时 令Label InputEdit的Visible属性为False 经过设置PassWord的PassWordChar可以确定输入口令时回显在屏幕上的字符
自定义意外EInvalidPassWord和EInvalidInput区分用于示意输入的口令合法和数字合法 它们都是自定义意外梁铅EInValidation的子类 而EInValidation间接从Exception意外类派生
上方是三个意外类的定义
EInValidation = class(Exception)
ErrorCode: Integer;
constructor Create(Const Msg: String;ErrorNum: Integer)
EInvalidPassWord = class(EInValidation)
constructor Create;
EInvalidInput = class(EInValidation)
constructor Create(ErrorNum: Integer)
EInValidation参与了一个私有成员ErrorCode来保管失误代码 失误代码的参与提供了很大的编程灵敏性 关于意外类 可以依据失误代码提供不同的失误信息 关于经常使用者可以经过截取失误代码 在try…except模块之外来解决意外
从以上定义可以发现 EInvalidPassWord和EInvalidInput的结构函数参数表中没有示意失误信息的参数 理想上 它们保管在结构函数外部 上方是三个自定义意外类结构函数的实现代码
constructor EInValidation Create(Const Msg: String; ErrorNum: Integer)
inherited Create(Msg)
ErrorCode := ErrorNum;
constructor EInValidPassWord Create;
inherited Create( Invalid Password Entered )
constructor EInValidInput Create(ErrorNum: Integer)
Msg: String;
case ErrorNum of
Msg := Can not convert String to Number ;
Msg := Number is out of Range ;
Msg := Input is Invalid ;
inherited Create(Msg ErrorNum)
关于EInvalidInput ErrorCode= 示意输入的不是纯数字序列 而ErrorCode= 示意输入数值越界
lishixinzhi/Article/program/Delphi//一、复合语句(或称语句结构、语句框架、语句形式等)1、集约式tryfinallyend和tryexceptend2、精细式tryexcepton意外1:当意外1出现时的处置方法on意外2:当意外2出现时的处置方法意外n:当意外n出现时的处置方法end二、便捷语句raise被动抛出意外,供外层意外解决机制解决改没虚;如本程序没有自己解决的机制,则交由操作系统解决,或核燃者说最外层的解决机察返制是操作系统,解决形式普通就是弹出对话框。三、嵌套形式举例1:DoEx1;onEx2:DoEx2;:raise;//自己不解决,由外层处置
当与一个意外失误关系的失误出现时,就会隐含触发该意外失误。
用户定义的意外错正慎腔误是经过显式经常使用RAISE语句来触发。
当引发一个意外失误时,控制就转向到EXCEPTION块意外失误局部,口头失误会决代码。
关于这类意外状况的解决,步骤如下:
1、在PL/SQL块的定义局部定义意外状况:
<意外状况>EXCEPTION;
2、RAISE<意外状况>;
3、在PL/SQL块的意外状况解决局部对意外状况做出相应的解决。
例:降级指定员工工资,参与100;
try的时刻,经过if/else判别输入能否合亏旁规销渣橡,假设不合规就梁燃经常使用raise弹出一个意外,而后再except中抓取这个意外。
参考意外解决
有毁孙意外了可以用rasie选择意外了该做什么不过 即使没有纤链链意外 也可以raise来定义满足特定条件唤颂后放弃什么意外try:count[t]+=1except KeyError:count[t]=1if count[t]>1:raise (tag %s 重复出现了%s次%(str(t),str(count[t])))
本文地址:http://www.hyyidc.com/article/26396.html