云学python (第3章过程大于结果(上)异常处理)《vamei-从Python开始学编程》 笔记

3.5异常处理

1 .恼人的bug

    在运行时编译器才会发现的错误被称为运行时错误 (Runtime Error)。由于Python是动态语言,许多操作必须在运行时才会执行,比如确定变量的类型等。因此,Python要比静态语言更容易产生 运行时错误。

    还有一种错误,称为语义错误(SemanticError)。编译器认为你的程序没有问题,可以正常运行。但当检查程序时,却发现程序并非你想做的。

2. Debug

在程序内部插入简单的printI( )函数,就可以查看变量的状态以及运行进度有时,还可以将 某个指令替换成其他形式,看看程序结果有何变化,从而验证自己的假设。当其他可能性都排除了,那么剩下的就是导致错误的真正的原因。

      有一种开发程序的方式,就是测试驱动开发(Test-Driven Development, TDD)对于Python这样一种便捷的动态语言来说,很适合先写一个小型的程序, 实现特定的功能。然后,在小程序的基础上,渐进地修改,让程序不断进化,最后满足复杂的需求。整个过程中,你不断增加功能,也不断改正某些错误。

3.异常处理

对于运行时可能产生的错误,我们可以提前在程序中处理。这样做有两个可能的目的:一个是让程序中止前进行更多的操作,比如提供更多的关于错误的信息。另一个则是让程序在犯错后依然能运行下去。异常处理还可以提高程序的容错性。

下面的一段程序就用到了异常处理:

while True:
    inputStr=input("Please input a number:")
    try:
        num=float(inputStr)
        print("Input number:",num)

        print("result:",10/num)

    except ValueError:
        print("Illegal input. Try Again.")

    except ZeroDivisionError:
        print("Illegal devision by zero. Try Again.")

如果try中有异常发生时,将执行异常的归属,执行except。异常层层比较,看是否是exception 1、exception2......直到找到其归属,执行相应的except中的语句。如果try中没有异常,那么except部分将跳过,执行else中的语句。finally是无论是否有异常,最后都要做的一些事情。

如果except后面没有任何参数,那么表示所有的exception都交给这段程序处理。如果无法将异常交给合适的对象,那么异常将继续向上层抛出,直到被捕捉或者造成主程序报错。

使用raise关键字,我们也可以在程序中主动抛出异常。比如:

​​​​​​​raise ZeroDivisionError()

​​​​​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值