Day27 python基础--异常处理

一,异常处理:

  Q1:什么是异常?

    在编译阶段没问题,在执行阶段才报错

  Q2:什么是错误?

    实指语法错误:在程序之前就规避掉,不应该留到程序中来进行异常处理

  特点  

  异常出现之后,程序就不继续执行了,即便是放在try语句中的内容,在遇到报错之后也会中断这段语句的执行

二,异常处理语法结构

# try/except
# try/except/else
# try/finally
# try/ except / finally
# try/ except / else / finally
#单分支
l = ['登录','注册']
try:
    num = int(input('num:'))
    print(l[num-1])
except IndexError:
    print('no')

#多分支
l = ['登录','注册']
try:
    num = int(input('num:'))
    print(l[num-1])
except (IndexError,ValueError):
    print('no')

l = ['登录','注册']
try:
    num = int(input('num:'))
    print(l[num-1])
except ValueError:
    print('no')
except IndexError:
    print('no')

#万能异常处理:exception
l = ['登录','注册']
try:
    num = int(input('num:'))
    print(l[num-1])
except Exception:
    print('no')

  

  as语法:获取报错信息

#as语法
l = ['登录','注册']
try:
    num = int(input('num:'))
    print(l[num-1])
except (ValueError):
    print('No')
except Exception as e:  #list index out of range   获取报错信息
    print(e)

三,异常处理中的其他机制

#else
try:
    name = '122'
except NameError:#ValueError:
    print('触发了一个value error')
else:
    print('执行啦')  #主要目的:汇报这段try内的代码顺利的执行了
#finally 无论如何都要执行
#用于收尾工作,打开了一个文件,占用了一个网络资源,打开了一个和数据库的链接,最后执行finally内的语句,进行关闭,即便是程序崩溃的情况下
def func2():
    try:
        f = open('content')
        name   #语法错误
    finally:   #报错,程序退出都会执行
        f.close()
        print('cloed')
#raise NameError:主动触发异常
raise NameError("name'name'is not defined")
#自定义异常
#一般不用于报错给用户,一般用于报错给开发者
class EvaException(BaseException):  #默认继承BaseException
    def __init__(self,msg):
        super().__init__()
        self.msg = msg
    def __str__(self):    
        return self.msg

raise EvaException('eva的异常')
#断言 :类似于if语句assert 1==1 #满足条件继续执行下面的代码assert 1==2 #不满足条件,报错

猜你喜欢

转载自www.cnblogs.com/lianyeah/p/9628374.html