异常处理
一. 异常处理 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 # 只能接受一个布尔值 什么都不输出