异常处理

一:异常基础

 (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 @ 2019-08-08 23:00  SR丶  阅读(258)  评论(0)    收藏  举报