异常处理

一:异常基础#

 (1)异常概念:

   (1)当程序在运行的时候 出现未知的错误

   (2)如果没有进行处理 会呈现出异常 程序随之结束

 

 (2)异常类型:

  (1)语法错误:

    (1)错误能立马发现 且作为程序与不能容忍语法错误

    (2)如果发现语法错误 需要立马改正

 (2)逻辑错误:

    (1)程序在运行的时候 出现不可预知或者不可避免的错误

    (2)针对该种错误可以通过异常捕获处理:

 

 (3)常见的错误类型:

    (1)NAMERROR   名字错误
    (2)SyntaxError     语法错误
    (3)KeyError     键不存在
    (4)ValueError    值错误
    (5)IndexError    索引错误

 

二:避免方法#

  (1)如果针对错误是不能提前预知的 可以使用try....except.... 在错误发生之后进行处理

例如:

复制代码
try:
    被检测的代码块
except 异常类型:
    try中一旦检测到异常,就执行这个位置的逻辑
#举例
try:
    f=open('a.txt')
    g=(line.strip() for line in f)
    print(next(g))
    print(next(g))
    print(next(g))
    print(next(g))
    print(next(g))
except StopIteration:
    f.close()
View Code
复制代码

  

    (2)可以根据条件进行异常处理 如果错误条件可以提前预知 我们可以通过if进行处理 防止错误发送

例如:

复制代码
AGE=10
while True:
    age=input('>>: ').strip()
    if age.isdigit(): #只有在age为字符串形式的整数时,下列代码才不会出错,该条件是可预知的
        age=int(age)
        if age == AGE:
            print('you got it')
            break
View Code
复制代码

 

(3)Exciption/BaseException

作用:当可能出现大量的异常的时候 其可以匹配任意类型的错误
例如:
复制代码
try:
    name
    l = [1,2,3]
    l[111]
    d = {'name':'jason'}
    d['password']
    # Exception
except BaseException:  # 万能异常  所有的异常类型都被捕获
    print('老子天下无敌')
复制代码

 

(5)finally:

作用:无论有没有异常 最后都会执行我

例如:

复制代码
try:
    # name
    l = [1,2,3]
    l[111]
    # d = {'name':'jason'}
    # d['password']
except Exception:  # 万能异常  所有的异常类型都被捕获
    print('老子天下无敌')
else:
    print('被检测的代码没有任何的异常发生 才会走else')
finally:
    print('无论被检测的代码有没有异常发生 都会在代码运行完毕之后执行我')
复制代码

 

rasie:

作用:主动抛出异常

例如:

主动抛异常
if 'egon' == 'DSB':
    pass
else:
    raise TypeError('尽说大实话')
关键字raise就是主动抛出异常

 

assert:

作用:猜测数据的状态 猜对了正常执行 猜错了抛出异常

例如:

主动抛异常
if 'egon' == 'DSB':
    pass
else:
    raise TypeError('尽说大实话')
关键字raise就是主动抛出异常

 

自定义异常:

作用:可以继承BaseException 通过该类可以自定义自己异常

例如:

class MyError(BaseException):
     def __init__(self,msg):
         super().__init__()
         self.msg=msg
     def __str__(self):
         return '<dfsdf%ssdfsdaf>' %self.msg

raise MyError('我自己定义的异常')
posted @   SR丶  阅读(244)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示
CONTENTS