异常处理

一. 异常处理

IndexError [][1]
KeyError {}['key']
pickle.load() EOFError
FileNotFoundError open('aa')
ModuleNotFoundError import aaaaaaaaaaa
ValueError int('sdjkhf')
NameError name
SyntaxError 语法错误

多行报错: 在嵌套调用的过程中, 内部代码出了问题, 外部所有的调用的地方都会成为报错追溯信息的一部分, 要从下往上找, 看不出问题再把报错的错误提示贴到百度
def func1():
    name

def func2():
    func1()

def main():
    func2()

main()


单分支
try:
    pass
except ValueError:
    pass

多分支
try:
    pass
except ValueError:
    pass
except IndexError:
    pass

多分支合并
try:
    pass
except (ValueError, IndexError):
    pass

万能异常
try:
    pass
except:   # 或except Exception:  或except Exception as e:
    # print(e)
    pass

多分支 + 万能异常 : 万能异常应该永远放在异常处理的最下面
try:
    pass
except (ValueError,IndexError):
    print('针对性的处理')
except Exception as e:
    print(e)
    print('通用性的处理')


异常处理的几种情况
try ... except
try ... except ... else
try ... finally
try ... except ... finally
try ... except ... else ... finally

else分支 当代码不发生异常, 不进行except的输出时, 进行else的输出
try:
    print('aaa')
except NameError:
    print('name error')
except IndexError:
    print('index error')
except Exception as e:
    print('Exception')
else:
    print('else')

finally分支, finally用来回收一些操作系统的资源 : 数据库连接 打开的文件句柄 网络连接
try:
    print('aaa')
except NameError:
    print('name error')
except IndexError:
    print('index error')
except Exception as e:
    print('Exception')
else:
    print('else')
finally:                     # 无论如何都会被执行
    print('finally')         # 无论是否执行else, 是否报错, 最终都会执行finally

def func():
    f = open('file')
    try:
        while 1:
            for line in f:
                if line.startswith('a'):
                    return line
    except:
        print('异常处理')
    finally:      # 即使return也会先执行fianlly中的代码
        f.close()

try:
    f = open('www','w')
    f.read()
finally:           # 即使遇到报错,程序结束,也会先执行finally中的代码,然后再结束程序
    f.close()
    print('文件已经关闭了')


主动抛出异常 : 是给其他开发者用的
raise ValueError
raise ValueError('你写的不对')

断言 - 语法
assert 1==2  # 只能接受一个布尔值    输出错误AssertionError
assert 1==1  # 只能接受一个布尔值    什么都不输出

  

posted @ 2018-08-22 19:44  NachoLau  阅读(109)  评论(0编辑  收藏  举报