异常处理
异常处理是为了让程序出错后,既能捕获到异常,又不影响程序运行。
异常处理的关键字是【try...except...finally...】,即先要考虑到这段代码可能会出现什么样的错误,然后做对应的处理,
try里面就是包含你做处理的代码,except里面就是出了某种错误的时候,怎么去处理,finally里面是不管出不出异常,
都处理这里的代码;还有一个else,就是不出异常时如何处理。
下面是一个异常处理的例子
1 def exc(a,b): 2 try: 3 c=a/b 4 except Exception as e: 5 print('出错了,所有类型错误,错误是%s' %e) 6 except KeyError as e: 7 print('Key出错了') 8 else: 9 print('这里没有出错') 10 return c 11 finally: 12 print('出没没错咱都走这里,多用于数据库关闭')
常见的异常信息
1 AttributeError: 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x 2 3 IOError:输入/输出异常,一般是无法打开文件 4 5 ImportError: 无法导入模块或包,一般是路径问题或名称错误 6 7 IndentationError:代码没有正确对齐,属于语法错误 8 9 IndexError:下标索引超出序列边界,比如x只有三个元素,却试图访问x[3] 10 11 KeyError:试图访问字典里不存在的键 12 13 KeyboardInterrupt:Ctrl+C被按下 14 15 NameError:使用一个还未被赋予对象的变量 16 17 SyntaxError: 语法错误 18 19 TypeError: 传入对象类型与要求的不符 20 21 UnboundLocalError:试图访问一个还未被设置的局部变量,一般是由于在代码块外部还有另一个同名变量 22 23 ValueError: 传入一个调用者不期望的值,即使值的类型是正确的
主动抛出异常
有时程序需要我们主动抛出异常,此时需要使用【raise】来完成.
1 def is_corrent_sql(sql): 2 #select insert delete update 3 sql_start=['select','insert','delete','update'] 4 for start in sql_start: 5 if sql.startswith(start): 6 pass 7 else: 8 raise TypeError #主动抛出异常,自定义异常 9 is_corrent_sql('sss')