Python学习之==>异常处理
一、为什么要进行异常处理
程序在运行过程中,可能会遇到各种各样的错误,程序一旦出错,就会停止运行。为了让程序能够正常运行完,就需要捕捉异常,通过对捕捉到的异常做对应的处理,来保证程序正常运行。
二、捕捉所有异常
1、try:捕捉这段代码的异常
2、except Exception:捕捉所有异常
3、else:没有出错则执行else下面的代码,但else不写也可以
4、finally:无论是否有异常,都会执行finally下面的代码,它也可以不写
1 # 异常处理 2 first = input('first:') 3 second = input('second:') 4 try: # 捕捉异常 5 first = int(first) 6 second = int(second) 7 res = first/second 8 except Exception as e: # try里面这段代码出异常的时候走 9 print(e) 10 print('出错了') 11 else: # 没有出错,不是必须写的 12 print('没有出错') # 没有出错的时候走 13 print(res) 14 finally: # 不管是否出错都会执行它,也不是必须写的 15 print('无论是否出错都会执行这条代码!')
三、捕捉异常练习:完善MySQL操作函数
1 def my_db(sql): 2 import pymysql 3 try: 4 conn = pymysql.connect(**MYSQL_INFO) 5 except Exception as e: 6 print('数据库连接失败') 7 return '数据库连接失败' # 遇到return函数结束 8 else: # 没有出错继续执行 9 cur = conn.cursor() 10 try: 11 cur.execute(sql) 12 except Exception as res: 13 print('执行sql出错,sql是:%s'%sql) 14 else: # 没有出错继续执行 15 if sql.strip().split()[0].upper() == 'SELECT': 16 res = cur.fetchall() 17 else: 18 conn.commit() 19 res = 'OK' 20 finally: # 这个finally对应的是执行sql出错的try,前面连接失败直接跳出了函数 21 cur.close() 22 conn.close() 23 return res
四、常见的异常
1 AttributeError: 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x 2 IOError:输入 / 输出异常,一般是无法打开文件 3 ImportError: 无法导入模块或包,一般是路径问题或名称错误 4 IndentationError:代码没有正确对齐,属于语法错误 5 IndexError:下标索引超出序列边界,比如x只有三个元素,却试图访问x[3] 6 KeyError:试图访问字典里不存在的键 7 KeyboardInterrupt:Ctrl + C被按下 8 NameError:使用一个还未被赋予对象的变量 9 SyntaxError: 语法错误 10 TypeError: 传入对象类型与要求的不符 11 UnboundLocalError:试图访问一个还未被设置的局部变量,一般是由于在代码块外部还有另一个同名变量 12 ValueError: 传入一个调用者不期望的值,即使值的类型是正确的
五、主动抛出异常
在代码里让它自动抛出一个异常,然后捕捉到。比如我们在写自动化测试脚本时,结果和预期不符,就可以主动抛出一个异常,然后捕捉到做其他处理。主动抛出异常使用raise关键字。
1 try: 2 raise KeyError # 主动抛出一个keyerror的异常 3 except KeyError as e: 4 print('这是主动抛出的异常')