异常处理

NameError  a

IndexError  [ ][1]  

ValueError  int('haha')

SyntaxError  语法错误

FileNotFoundError    open('aa')

````以上都是一些常见的异常类型 , 异常发生了,程序就会报错,后面的程序就不执行了.

多行报错

  在嵌套调用的过程中,内部的代码出现了问题,外部所有调用的地方都成为报错追溯信息的一部分

  解决办法:从下往上找,找到出错的哪一行,看看能不能看出问题,不过看不懂,就把最后一行的错误类型和详细提示贴到百度里,看看有没有解决办法

 

Python提供了一种特定的语法结构来处理异常

try:
     被检测的代码块
except 异常类型:
     代码          try中一旦检测到异常,且和except接收的异常类型相同,就会执行下面的逻辑代码  

也可以多分支处理:

  try: 

    pass 

  except 错误类型: 

    pass

  except 错误类型2:

    pass

万能异常  

  try:

     pass

  except exception as e:  #什么错误类型都接收,然后把错误类型复制给e  

    print(e)       #查看错误类型

    pass        做一些通用性的处理

def buy():
    print('buy')
    name
def back():
    print(back)
    [][1]
def show():
    print('show')
    1/0
def minu():
    l=[('购物',buy),('退货',back),('查看订单',show)]
    while 1:             #一直循环,直到break       
        for num,i in enumerate(l,1):
            print(i,num)      #打印l
        number=input('>>>')    #当你要处理的内容不确定的时候,有用户参与的时候最容易出错
        try:
            func=l[int(number)-1][1]
            func()
        except Exception as e:  #万能异常
            print(e)
            print('用户在%s操作发生了不可知的异常' % l[int(number)-1][0])  #通用性的处理
       break minu()

多分支+万能异常:  万能异常放在异常处理的最下面

def buy():
    print('buy')
    name
def back():
    print(back)
    [][1]
def show():
    print('show')
    1/0
def minu():
    l=[('购物',buy),('退货',back),('查看订单',show)]
    while 1:
        for num,i in enumerate(l,1):
            print(i,num)
        number=input('>>>')
        print(l[int(number)-1])
        try:
            func=l[int(number)-1][1]
            func()
        except IndexError:  #针对性的处理
            print('aaa')
        except Exception as e:#通用性的处理
            print(e.args,e.__traceback__.tb_frame,e.__traceback__.tb_lineno)
            print('用户在%s操作发生了不可知的异常' % l[int(number)-1][0])
minu()
else分支,当try中的代 

else分支 :当try中的分支不发生异常的时候,走else分支

finally分支 :即便遇到报错,程序结束 ,也会先执行finally里的代码, 用于回收操作系统的资源

try:
    print('aaa')  # 给某某某发邮件
    name
    int(input('>>>')
except NameError:  
    print('name error')
except Exception as e:
    print('Exception')
else:  # 当try中的代码不发生异常的时候 走else分支 
    print('else')
finally: # 无论如何都会被执行
    print('finally')

  

其他(目前用不到)

raise 主动抛异常: 给其让开发者看的

assert 布尔值 :断言语法

 

posted @ 2018-08-23 21:34  amberLIU  阅读(210)  评论(0)    收藏  举报