You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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常规写法。

内容的提问来源于stack exchange,提问作者Richard Harrison

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 09:56:09