gpt4 book ai didi

python - 属性错误 : 'module' object has no attribute

转载 作者:太空狗 更新时间:2023-10-30 02:11:43 24 4
gpt4 key购买 nike

我一直在互联网上搜索解决方案,但我遇到的一切都没有帮助。所以现在我转向你。

Traceback (most recent call last):
File "cardreader.py", line 9, in <module>
import ATRdb as ATR
File "/home/pi/Desktop/CardReader/ATRdb.py", line 4, in <module>
import cardreader
File "/home/pi/Desktop/CardReader/cardreader.py", line 113, in <module>
main()
File "/home/pi/Desktop/CardReader/cardreader.py", line 40, in main
getData(db)
File "/home/pi/Desktop/CardReader/cardreader.py", line 98, in getData
if ATR.checkPerms(db,track1):
AttributeError: 'module' object has no attribute 'checkPerms'

我有两个文件 cardreader.py 和 ATRdb.py

---ATRdb.py 有这个设置

import sys
import MYSQLdb
import datetime
import cardreader

def checkPerms(db, securitycode):
try:
cursor = db.cursor()
cursor.execute("""SELECT permissions FROM atrsecurity.employee WHERE securitycode = %s""", (securitycode))
r = cursor.fetchone()
Permissions = r
if '3' in Permissions[0]:
return True
else:
return False
except Exception:
cardreader.main()
return False

---cardreader.py 有这个设置

import sys
import usb.core
import usb.util
import MYSQLdb
import ATRdb as ATR

def main():
db = MYSQLdb.connect(HOST,USER, PASS, DB)
print("Please swipe your card...")
getData(db)
main()
db.close()
def getData(db):
#
#lots of code to get card data
#
if ATR.checkPerms(db, track1):
print ("User has permission")
unlockDoor()

我在“If ATR.checkPerms():”部分收到错误。任何帮助,将不胜感激(第一个python项目)

最佳答案

你的问题是循环导入。

读卡器中,您可以这样做:

import ATRdb as ATR

这开始导入 ATRdb,但是在代码中插入几行,它就命中了:

import cardreader

从这里开始的确切顺序取决于 cardreader.py 是否是您的主脚本,以及调用 main 的顶级代码是否受if __name__ == '__main__' 守卫(并假设顶级代码在 cardreader 而不是其他地方)。与其尝试详细解释所有可能性(或等待您告诉我们哪一种与您的实际代码匹配),不如让我们根据行为看一下我们所知道的是真的:

在某种程度上,您在完成 ATRdb 的导入之前调用了 main

这意味着,此时 ATRdb 中除了 sysMYSQLdbdatetime 之外什么都没有>(以及每个模块自动获取的一些特殊属性)。特别是,它还没有到达 checkPerms 的定义,所以模块中还不存在这样的属性。

当然,它最终会完成对 ATRdb 其余部分的导入,但到那时已经太晚了;您已经调用了 main,它尝试调用 ATR.checkPerms 但失败了。

虽然有各种复杂的方法可以使循环导入工作(有些请参见 the official FAQ),但最简单和最干净的解决方案就是不这样做。如果 ATRdb 需要 cardreader 中的某些功能,您可能应该将它们分解到第三个模块中,例如 cardutils,这两个 ATRdbcardreader可以导入。

关于python - 属性错误 : 'module' object has no attribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20690772/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com