Python系统学习第十六课

异常

  • 广义上的错误分为错误和异常
  • 错误指的是认为可以避免
  • 异常是指在语法逻辑正确的前提下,出现的问题
  • 在python,异常是一个类,可以处理和使用

异常处理

  • 保证程序在最坏的情况下得到妥善的解决

  • python 的异常处理模块全部语法为:
    try:
    尝试实现某个操作,
    如果没实现操作,任务就可以完成
    如果出现异常,讲一场从当前代码扔出去尝试解决异常

    except 异常类型1:
    解决方案1:用于尝试在此处处理异常解决问题

    except 异常类型2:
    。。。。。

    except (异常类型1,异常类型2,。。。):
    解决方案:针对多个异常使用的处理方式

    except:
    解决方案:所有异常的处理方案

    else:
    如果没有出现异常,将会执行的代码

    finally:
    不论是否异常都会执行的代码

  • 除了except(最少一个)以外,else和finally可选

#简单案例
try:
    num = int(input("输入一个数:"))
    rst = 100/num
    print("计算结果是:{0}".format(rst))
    #捕获异常以后,把异常实例化,出错信息会在实例里
    #以下语句是捕获ZeroDivisionError异常并实例化实例e
    #需要把越具体的错误,越往前放
    #越是子类的异常,放在前边
    #越是父类的异常,越要放在后边
    #在处理异常的时候,一旦拦截到某一个异常,就不在往下继续直接往下进行,
except ZeroDivisionError as e:
    print("你输入的错误。")
    print(e)
    exit()   #退出程序
    #所有异常都是继承自Exception
    #如果写上下面这句话,任何异常都会拦截
    #而且,下边这句话建议都要写上,而且一定是最后一个。
except Exception as e:
    print("错误!")
    print(e)
输入一个数:0
你输入的错误。
division by zero

用户手动引发异常

  • 当某些情况, 用户希望自己引发一个异常的时候,可以使用
  • raise 关键字引发异常
#raise案例
try:
    print("i love you ")
    print(3.0141563)
    #手动引发一个异常
    #注意语法:raise ErrorClassName
    raise ValueError   #自己抛出一个异常,下边的不执行了。
    print("aaasss")
    
except NameError as e:
    print("NameError")
except ValueError as e:
    print("ValueeError")
except Exception as e:
    print("Exception")
finally:
    print("bixuzhixing")
i love you 
3.0141563
ValueeError
bixuzhixing
#自己定义异常
#需要注意:自定义异常必须是系统异常的子类
class LiziError(ValueError):
    pass
try:
    print("i love you ")
    print(3.0141563)
    #手动引发一个异常
    #注意语法:raise ErrorClassName
    raise LiziError   #自己抛出一个异常,下边的不执行了。
    print("aaasss")
    
except NameError as e:
    print("NameError")
except LiziError as e:
    print("LiziError")
except ValueError as e:
    print("ValueeError")
except Exception as e:
    print("Exception")
finally:
    print("bixuzhixing")
i love you 
3.0141563
LiziError
bixuzhixing
#自己定义异常
#需要注意:自定义异常必须是系统异常的子类
class LiziError(ValueError):
    pass
try:
    print("i love you ")
    print(3.0141563)
    #手动引发一个异常
    #注意语法:raise ErrorClassName
    raise LiziError   #自己抛出一个异常,下边的不执行了。
    print("aaasss")
    
except NameError as e:
    print("NameError")
#如果没有子类的Error就找父类的Error
except ValueError as e:
    print("ValueeError")
except Exception as e:
    print("Exception")
finally:
    print("bixuzhixing")
i love you 
3.0141563
ValueeError
bixuzhixing
#else语句案例
try:
    num = int(input("输入一个数:"))
    a = 100/num
except Exception as e:
        print("Exception")
else:
    print(" no ")
finally:
    print("yyyyy")
输入一个数:0
Exception
yyyyy

关于自定义的异常

  • 只要是raise异常, 则推荐自定义异常
  • 在自定义异常的时候,一般包含以下内容
    • 自定义发生异常的异常代码
    • 自定义发生异常的问题提示
    • 自定义发生异常的行数
  • 最终的目的是,一旦发生异常,方便程序员快速定位异常位置

猜你喜欢

转载自blog.csdn.net/qq_42633819/article/details/85692624