【第七天】Python的异常处理

3.5异常处理

1.bug

语法错误
运行时错误
语义错误

2.Debug

3.异常处理

对于运行时可能产生的错误,我们可以提前在程序中操作
这样做有两个可能的目的:
(1)让程序终止前进行更多的操作,比如提供更多关于错误的信息
(2)让程序在犯错后依然能运行下去

异常处理还能提高程序容错性,例如

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.")
Please input a number:2
Input number: 2.0
result: 5.0
Please input a number:-2
Input number: -2.0
result: -5.0
Please input a number:11
Input number: 11.0
result: 0.9090909090909091
Please input a number:-11
Input number: -11.0
result: -0.9090909090909091
Please input a number:0
Input number: 0.0
Illegal devision by zero. Try Again.
Please input a number:p
Illegal input. Try Again.
Please input a number:

需要异常处理的程序包裹在try结构中,而except说明了当特定错误发生时
程序该如何应对,程序中,input()是一个内置函数,用来接收命令行的输入
而float()函数则用于把其他类型的数据转换为浮点数
如果输入的是一个字符串,如“p”,则无法转换为浮点数
并触发ValueError,而相应的except就会运行隶属于它的程序
如果输入的是0,那么除法的分母为0,将触发ZeroDivisionError
这两种错误都是由预设的程序处理的,所以程序运行不会终止

如果没有发生异常,比如输入2,那么try部分正常运行,except部分被跳过
异常处理完整语法为:

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

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

如果except后面没有任何参数,那么表示所有的exception都交给这段程序处理
例如:

while True:
    inputStr = input("Please input a number:")
    try:
        num = float(inputStr)
        print("Input number:",num)
        print("result:",10/num)
    except:
        print("Something Wrong.Try Again.")
Please input a number:p
Something Wrong.Try Again.
Please input a number:2.5
Input number: 2.5
result: 4.0
Please input a number:3.5564
Input number: 3.5564
result: 2.8118321898549095
Please input a number:

如果无法将异常交给合适对象,那么异常将继续向上层抛
直到被捕捉或者造成主程序报错,例如:

def test_func()
    try:
        m = 1/0
    except ValueError:
    print("Catch ValueError in the sub-function")
try:
    test_func()
except ZeroDivisionError:
    print("Catch error in the main program")
Catch error in the main program

子程序的try…except…结构无法处理相应的除以0的错误
所以错误被抛给上层程序

    原文作者:人生苦短_我用Python
    原文地址: https://www.jianshu.com/p/d5e6140a3ebf
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞