Python3与SQLite3问题:类中函数为何提示未定义?
问题描述
我编写了如下Python3代码,使用SQLite3操作数据库,定义了DataModule类及其中的del_tbl和createTable方法,但调用时出现错误:“name 'del_tbl' is not defined”。
代码如下:
import sqlite3 as sq3 class DataModule: def del_tbl(tbl_Name): sq3.Connection("csm").cursor().execute("DROP TABLE IF EXSISTS '{}'".format(tbl_Name)) print("Table [{}] has beeen deleted".format(tbl)) def createTable(tableName,cmd): del_tbl("tbl_login") del_tbl("tbl_address") cmd=str.join(", ",cmd) sq3.Connection("csm").cursor().execute("CREATE TABLE IF NOT EXISTS {} ({}); ".format(tableName, cmd))
报错信息:
Error: ("name 'del_tbl' is not defined",)
Error: ("name 'del_tbl' is not defined",)
Press any key to continue . . .
问题原因与解决方法
类方法调用逻辑错误:在类的
createTable方法中直接调用del_tbl是无效的,因为类内方法需要通过类或实例来引用。同时你的方法缺少必要的参数(实例方法的self或类方法的cls),会导致参数传递异常。推荐改成类方法实现,代码修正如下:
import sqlite3 as sq3 class DataModule: @classmethod def del_tbl(cls, tbl_Name): # 修正SQL语句中EXSISTS的拼写错误为EXISTS sq3.Connection("csm").cursor().execute("DROP TABLE IF EXISTS '{}'".format(tbl_Name)) # 修正print语句中未定义的tbl变量为tbl_Name print("Table [{}] has been deleted".format(tbl_Name)) @classmethod def createTable(cls, tableName, cmd): # 通过cls调用类内的del_tbl方法 cls.del_tbl("tbl_login") cls.del_tbl("tbl_address") # 简化str.join写法为", ".join(cmd) cmd = ", ".join(cmd) sq3.Connection("csm").cursor().execute("CREATE TABLE IF NOT EXISTS {} ({}); ".format(tableName, cmd))额外错误修正:
- SQL语句中
EXSISTS拼写错误,需改为EXISTS,否则删除表的逻辑不会生效; del_tbl方法的print语句里使用了未定义的tbl变量,应替换为入参tbl_Name;str.join(", ",cmd)可以简化为", ".join(cmd),更符合Python常规写法。
- SQL语句中
内容的提问来源于stack exchange,提问作者Richard Harrison
相关产品推荐
相关产品推荐

