Python操作MySQL遇NameError: mydb未定义,求报错原因解析
问题分析与解决
报错原因
当mysql.connector.connect()抛出ProgrammingError异常时,try块里的mydb变量根本没完成赋值——因为数据库连接操作失败,代码直接跳去except块打印信息,这时候mydb在当前作用域里完全不存在。后面执行mycursor = mydb.cursor(),自然会触发NameError。
简单说:只有连接成功时mydb才会被定义,连接失败触发异常的话,mydb从始至终都没被创建出来。
修复方案
你需要保证mydb在任何情况下都有合法定义,或者只在连接成功后才执行游标相关操作,这里给两种实用的修复方式:
方式1:捕获异常后创建数据库并重新连接
既然捕获的是数据库不存在的错误,直接在异常处理里创建数据库,再重新建立连接:
import mysql.connector mydb = None try: mydb = mysql.connector.connect( host="localhost", user="root", password="", database="siteDB", ) except mysql.connector.errors.ProgrammingError: print('DB crée') # 先连接到MySQL服务(不指定具体数据库) temp_conn = mysql.connector.connect( host="localhost", user="root", password="" ) temp_cursor = temp_conn.cursor() temp_cursor.execute("CREATE DATABASE siteDB") temp_conn.close() # 重新连接到刚创建的siteDB mydb = mysql.connector.connect( host="localhost", user="root", password="", database="siteDB", ) # 确认mydb有效后再创建游标 if mydb: mycursor = mydb.cursor()
方式2:把游标操作放到try块内部
如果只有连接成功时才需要执行后续数据库操作,直接把游标创建逻辑移到try块里:
import mysql.connector try: mydb = mysql.connector.connect( host="localhost", user="root", password="", database="siteDB", ) mycursor = mydb.cursor() # 所有数据库操作都放在这个try块里 except mysql.connector.errors.ProgrammingError: print('DB crée')
内容的提问来源于stack exchange,提问作者Lilkoro
相关产品推荐
相关产品推荐

