python基础之错误和异常的处理

错误和异常

错误

错误: 错误代表的是在运行代码之前就可见(不是指的写代码的人可见,而是指python解释器可见)的问题程序不运行,直接报出错误, 只能在运行前进行修改。
常见错误: SyntaxError: invalid syntax

异常

异常: 程序运行期间遇到了问题, 报出错误在程序运行期间遇到了异常之后,如果异常不被处理或者不能处理,程序会向Python解释器抛出异常,Python解释器如果接收到了异常,那认为程序异常结束(exit code 1)。
异常处理的操作:我们去捕获异常,然后去处理(程序自己去做的)那么Python解释器,就接收不到异常,意味着程序不会异常终止。

异常处理的语法

常见类型:
ZeroDivisionError
NameError
KeyError
IndexError

语法:
一.异常处理的语法:
try:
    要执行的语句    #可能出现异常的语句
except: #捕获异常
    执行异常处理的语句
上面的语句有省略:
输入:print(111)
     try:
        1 / 0
     except  (Exception):
     print("division by zero")
     print(222)
结果:111
     division by zero
     222
注意:
例子: ZeroDivisionError 是 ArithmeticError的儿子
     ArithmeticError 是 Exception的儿子
     假设: ZeroDivisionError他犯了错,
          1.它可以自己承担 ZeroDivisionError
          2.可以让他的父亲承担 ArithmeticError
          3.可以让他的爷爷承担 Exception
如果你遇到了异常,尽量直接使用它自己来承担错误,要精准的捕获异常



二.异常处理的复杂语句
try:
    要执行的语句
except ExceptionType1:
    处理ExceptionType1的语句
except ExceptionType2:
    处理ExceptionType2的语句
except ExceptionType3:
    处理ExceptionType3的语句
......
例子:
    try:
    1 / 0
    list_data = [1, 2, 3]
    list_data[3]
    dict_data = {1: 2}
    dict_data[3]
    test
except IndexError:
    print("Index")
except KeyError:
    print("Key")
except NameError:
    print("Name")
except ZeroDivisionError:
    print("Zero")
结果:
Index
执行的顺序:
1.执行try中的语句,若去执行 1 / 0, 他会抛出一个ZeroDivisionError异常
2.去执行异常捕获,他是顺序去执行:
     先去第一个except, 如果可以捕获异常,那么就直接结束了
     如果捕获不成功(异常类型不匹配),那么继续去执行下一个except
     直到匹配成功(捕获成功), 如果except都不能捕获抛出异常
     那么直接抛给Python解释器,程序异常结束
     语法格式有什么用途:
1.我们在写代码不能都是可能抛出的语句,所以为了保证程序的健壮性,才这样写。因为我们要确保的是,我们运行程序保证代码轻易报错,所以预知哪些会报错某种操作的时候,只会有一种报错。




三.加else的语法:
try:
    要执行的语句
except ExceptionType1:
    处理ExceptionType1的语句
except ExceptionType2:
    处理ExceptionType2的语句
else:
    在不抛出任何异常的情况下,去执行的语句
输入:
try:
    print(111)
    data = 0
except ZeroDivisionError:
    print("Zero")
except IndexError:
    print("Index")
else:
    print("No Error")




四.主动去抛出异常的语法:
raise ExceptionType
# 如果后面有需要的话,也可以自定去定义一个异常类型
# 重命名 使用 as
输入:
    try:
    1 / 0
except ZeroDivisionError as zde:
    print(zde)
结果:
division by zero
上一篇:【Python】基础学习(五)错误与异常


下一篇:python基础之pass语句