Python<2>异常基础

在Python中异常通常可以用于各种用途,下面是最常见的几种。

<1>错误处理

每当运行时检测到错误,Python的默认异常处理行为将启动(停止程序,打印错误信息)。如果不想启动这种默认

行为,就要写try语句捕捉异常并从异常中恢复。当检测到错误是,Python会跳到try处理器,程序在try之后会接着

续运行

<2>事件通知

发出有效状态的信号

<3>特殊情况处理

很难调整代码去处理的问题

<4>终止行为

<5>非常规流程控制

异常是一种高级的“goto”

 

捕获异常

try:

    List[99]=0 #越界数组

except IndexError:

    print "index error"

print "end"


 


 

结果:

index error

end

出现特定的异常会自动跳到except后执行处理,之后接着继续运行。

 

 

引发异常

try:

    raise IndexError

except IndexError:

    print"index error"


如果没有捕捉到异常,用户定义的异常就会触发,传给异常处理器。  

 

 

用户自定义异常。它继承自一个内置的异常类Exception。

class Bad(Exception)
    pass

def doomed():

    raise Bad()

try:

    doomed()

except Bad:

    print"got Bad"


 

终止行为

try:

    代码1

finally:

    代码2

 

同except的区别就是无论代码1是否发生异常,代码2都会执行  

 

完整代码:

try:
    ...
except exception1:
    ...
except exception2:    ...except:
    ...
else:
    ...
finally:
    ...

如果try中没有异常,那么except部分将跳过,执行else中的语句。

finally是无论是否有异常,最后都要做的一些事情。

流程如下,

try->异常->except->finally

try->无异常->else->finally


 如果try中有异常发生时,将执行异常的归属,执行except。异常层层比较,看是否是exception1,exception2...,直到找到其归属,执行相应的except中的语句。如果except后面没有任何参数,那么表示所有的exception都交给这段程序处理。如果无法将异常交给合适的对象,异常将继续向上层抛出,直到被捕捉或者造成主程序报错。比如下面的程序

def test_func():
    try:
        m = 1/0
    except NameError:
        print("Catch NameError in the sub-function")

try:
    test_func()
except ZeroDivisionError:
    print("Catch error in the main program")

 
 

 

参考<<learning python>>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值