我一直在互联网上寻找解决方案,但我遇到的一切都没有帮助。所以现在我转向你们。
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项目)
发布于 2013-12-20 04:23:49
您的问题是循环导入。
在cardreader中,您可以执行以下操作:
import ATRdb as ATR这将开始导入ATRdb,但是在代码中添加几行代码,就会遇到这样的情况:
import cardreader此处的确切顺序取决于cardreader.py是否是您的主脚本,以及调用main的顶级代码是否受到if __name__ == '__main__'保护(并假设顶级代码是在cardreader中而不是其他地方)。不要试图详细解释所有的可能性(或者等待您告诉我们哪一个与您的实际代码匹配),让我们根据行为来看看我们所知道的是什么:
在某种程度上,您在完成ATRdb导入之前调用了main。
这意味着,在这一点上,ATRdb中除了sys、MYSQLdb和datetime (以及一些每个模块自动获得的一些特殊属性)之外什么也没有。特别是,它还没有得到checkPerms的定义,所以模块中还不存在这样的属性。
当然,最终它将完成导入ATRdb的其余部分,但此时为时已晚;您已经调用了main,它试图调用ATR.checkPerms,但失败了。
虽然有各种复杂的方法可以使循环导入工作(有关某些内容,请参阅the official FAQ ),但最简单、最干净的解决方案就是不这样做。如果ATRdb需要cardreader中的一些函数,您可能应该将这些函数分解到第三个模块中,比如cardutils,ATRdb和cardreader都可以导入。
https://stackoverflow.com/questions/20690772
复制相似问题