SQL异常处理

SQL异常处理

connection = mysql.connector.connect(
    =====)

为什么不放在try之前?

try:
    connection = mysql.connector.connect(
        host='localhost',
        port=3307,
        user='root',
        password='HT103066@lzs',
        database='test'
    )
    connection.start_transaction()
    cursor=connection.cursor()
    sql="INSERT INTO account(name,money) VALUES(%s,%s)"
    cursor.execute(sql,('王麻子',3500))
    connection.commit()
except Exception as e:
    if "connection" in dir():
        connection.rollback()
    print("错误原因是:%s"%e)
finally:
    if "connection" in dir():
        connection.close()


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小猿 2023-04-18 10:03:21

同学,你好!try...... except......finally语句是为了避免程序报错,报错后,后续代码无法执行。connection语句放在try 中若连接错误会执行except语句,程序不会报错。若放在try 语句之上若连接不成功程序会报错。

https://img1.sycdn.imooc.com//climg/643df9e20971b5b217210774.jpg

祝学习愉快~

  • 提问者 慕九州ing #1

    但这样connection不是局部变量吗,except中怎么还可以使用connection呢?

    2023-04-18 12:49:27
  • 好帮手慕小猿 回复 提问者 慕九州ing #2

    同学,你好!try......except....finally 不是函数,可以理解为全局变量。程序由上至下执行,若右侧mysql.connector.connect()创建连接成功会赋值给connection变量,若连接失败不会赋值给connection。程序会抛出异常执行except 语句。注意执行except时程序会判断dir()列表中是否有这个connection,没有connection即没创建成功连接。则不执行if 语句,没有使用到connection.rollback()函数。

    https://img1.sycdn.imooc.com//climg/643e2af40951b97b06390654.jpg

    祝学习愉快~

    2023-04-18 13:39:31
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师