1、异常处理

# 例:
l = [1, 2, 3]
d = {}

try:
    # print(l[4])
    print(d['name'])
# except IndexError as e:  #下标越界
#     print("下标不存在")
#     print(e)
# except KeyError as e:   #key不存在
#     print("key不存在")
#     print(e)
# 或者如下:
except Exception as e:   #Exception所有异常都可以捕获
    print("出异常了", e)
else:
    print("不出异常的时候走到这里")
finally:
    print("什么时候走这里呢")  # 有无异常都会走finally

2、return和finally的纠缠

def test():
    try:
        1 / 0
    except Exception:
        print('error')
        return
    finally:
        print('abc')
test()

注:

  • 在方法return动作之前,return语句执行之后,
  • 若finally中再有return语句,则此方法以finally的return作为最终返回,
  • 若finally中无return语句,则此方法以try的return作为最终返回。
  • 其实return与finally并没有明显的谁强谁弱,
  • 在执行时,是return语句先把返回值写入但内存中,
  • 然后停下来等待finally语句块执行完,return再执行后面的一段。

3、小练习(连接数据库的异常处理

import pymysql

mysql_info = {
    'host': '118.24.*.**',  #保密
    'port': 3306,
    'db': 'jxz',
    'password': '123456',
    'charset': 'utf8',
    'autocommit': True,
    'user': 'jxz'
}

def op_db(sql, one_tag=True):
    try:
        connect = pymysql.connect(**mysql_info)  #**后加字典,表示key=value格式
    except Exception as e:
        print("数据库链接失败",e)
        return "001"
    else:
        cur = connect.cursor(pymysql.cursors.DictCursor)
        try:
            cur.execute(sql)
        except Exception as e:
            print('执行sql出错',e)
            return "002"
        else:
            if one_tag:
                result = cur.fetchone()  # {}
            else:
                result = cur.fetchall()  # []
            return result
        finally:
            cur.close()
            connect.close()  #在连接数据后无论是否出现异常均需要关闭游标和连接

# op_db()

 

posted on 2020-05-24 18:11  彩彩常  阅读(217)  评论(0编辑  收藏  举报