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

Python运行报AttributeError: 'function'对象无oracleCreate属性怎么解决?

问题根因

  • 命名空间覆盖:你在createClass.py的createpage方法内部定义了一个名为oracleCreate的回调函数,和顶部导入的oracleCreate模块重名。执行obj = oracleCreate.oracleCreate()时,此时的oracleCreate已经是本地定义的函数,不是导入的模块,自然找不到类定义报错。而SQLite逻辑中导入的模块是SQLiteCreate(首字母大写),内部回调函数是sqliteCreate(全小写),名称不重复所以运行正常。
  • 业务逻辑错误:你在oracleCreate.py的createTable方法里,错误实例化了DBconnect.SQLiteDB()类执行Oracle表创建,要么会走SQLite的创建逻辑,要么调用Oracle专属语法时直接报错。
  • 循环导入隐患:createClass.py导入了oracleCreate模块,oracleCreate.py又反过来导入createClass模块,属于循环导入,部分执行场景下也会触发类找不到的报错。

修复方案

  1. 修改createClass.py里的Oracle按钮回调函数名,避免和导入模块重名,比如改成openOracleCreate:
# 原代码
def oracleCreate():
    quit()
    obj = oracleCreate.oracleCreate()
    obj.createpage()
# 修改后
def openOracleCreate():
    quit()
    obj = oracleCreate.oracleCreate()
    obj.createpage()

# 同步修改按钮绑定的command参数
oracle_but = Button(content, text="Oracle", command=openOracleCreate,width=15, height=2)
  1. 修正oracleCreate.py里的数据库实例化逻辑,替换为Oracle对应的DB类:
# 原代码
obj = DBconnect.SQLiteDB()
# 修改为DBconnect中定义的Oracle专属操作类,示例:
obj = DBconnect.OracleDB()
  1. 可选优化循环导入问题:把两个模块互相依赖的部分抽离到公共工具模块,或者使用延迟导入(在需要调用的函数内部再导入对应模块)。

内容的提问来源于stack exchange,提问作者Isaac Stong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:24:07