Python3.8+Flask项目出现local variable 'conn' referenced before assignment报错求助
问题原因及修复方案
报错根因
local variable 'conn' referenced before assignment报错的直接原因很明确:
- 你定义的
conn变量仅在try代码块的连接成功分支中才会完成赋值,一旦pymysql.connect()执行过程中抛出异常,程序会直接跳转进except分支,此时conn从未被赋值,函数末尾执行return conn时就会触发该错误。
代码其他问题
你贴出的代码还有两处明显的可优化点:
- 函数定义时传入的
db参数全程没有被使用,属于无效参数,可以直接删除 - 当前直接捕获所有
Exception的写法过于宽泛,无法定位数据库连接的具体故障(比如权限不足、实例地址不通、账号密码错误等),建议捕获pymysql.MySQLError并打印具体异常信息
修复后代码
import pymysql database_name = "dbx80" database_user = "user_auth" database_password = "Jan2019@" def connect_database(): conn = None try: conn = pymysql.connect( unix_socket="/cloudsql/servicisEX:us-central1:dbx43", port = 3306, user = database_user, password = database_password, database = database_name, charset="utf8" ) print(f"Connection {database_name} Succesful") except pymysql.MySQLError as e: print(f"Error connecting to {database_name}: {str(e)}") return conn
调用注意事项
上层调用该函数获取连接后,先判断返回的conn是否为None,再执行后续的数据库操作,避免后续操作触发空指针报错。
内容的提问来源于stack exchange,提问作者Erick Finn
相关产品推荐
相关产品推荐

