【发布时间】:2017-08-26 15:43:35
【问题描述】:
我在 python 中遇到一个属性错误,但我已经导入了我需要的所有内容。这很令人困惑,因为这似乎是合乎逻辑的,没有任何问题或秩序,我不认为我说的是来自 java 背景。
这是在一个名为 utils.py 的文件中
import runMain
def isUser(credentialsInput):
return credentialsInput in runMain.users
def isReserved(names):
for strings in runMain.roomName:
if names in strings:
return True
else:
return False
def getIndex(e, check):
return e.index(check)
def findInArray(e, searchName):
runMain.i = 0
while runMain.i < len(e):
test = e[runMain.i]
if searchName in test:
break
return runMain.i
def registerUser(creds):
runMain.users.__add__(len(runMain.users), creds)
def runCredentialCheck():
runMain.username = input("admin$ -u>>> ")
runMain.password = input("admin$ -p>>> ")
runMain.credentials = runMain.username + ":" + runMain.password
return isUser(runMain.credentials)
我有另一个名为 runMain 的文件,其中有以下代码:
import utils
import sys
TOTAL_ROOMS = 500
rooms = []
suite = []
reservations = []
reservationParts = []
roomNum = 0
suiteOut = ""
suiteF = ""
name = ""
userInput = ""
suiteT = " and is a suite"
utils.users.append("foo:hello")
userInput = input(">>> ")
while True:
if userInput == "new -r":
utils.username = input("admin$ -u>>> ")
utils.password = input("admin$ -p>>> ")
utils.credentials = utils.username + ":" + utils.password
if utils.isUser(credentialsInput=utils.credentials):
userInput = input("rsr# -n ")
reservationParts = userInput.split()
roomNum = reservationParts[0]
name = reservationParts[1]
if name in rooms:
print(">>> Room is occupied")
elif name in utils.roomName:
print(">>> Room is occupied")
rooms.append(roomNum)
utils.roomName.append(name)
utils.loopCount = 0
if "--suite" in userInput:
suite.append(True)
suiteOut = suiteT
else:
suite.append(False)
suiteOut = suiteF
reservations.append("Room " + roomNum + " is filled by " +
utils.roomName.__getitem__(utils.loopCount) + suiteOut)
for ints in rooms:
if suite.__getitem__(utils.loopCount):
suiteOut = suiteT
else:
suiteOut = suiteF
sys.stdout.write("Room " + ints + " is filled by " +
utils.roomName.__getitem__(utils.loopCount) + suiteOut)
print()
utils.loopCount += 1
userInput = input(">>> ")
if userInput == "quit()":
break
else:
print("Invalid Credentials")
elif userInput == "new -u":
if utils.runCredentialCheck():
utils.username = input("new -u -u>>> ")
utils.password = input("new -u -p>>> ")
utils.registerUser(creds=(utils.username + ":" + utils.password))
else:
print("Invalid Credentials")
userInput = input(">>> ")
我不确定我做错了什么。我收到错误: AttributeError: 模块 'utils' 没有属性 'runCredentialCheck'。
【问题讨论】:
-
utils是从哪里导入的? -
utils是在runMain文件中导入的文件
-
你的问题不在于
runMain导入,而是utils导入。可以发一下utils的内容吗? -
utils 内容贴在问题中
-
我认为您的主要问题之一是您有循环导入。
runMain正在导入utils正在导入runMain正在导入utils等。尝试将这些脚本分开一点(将相关数据交给utils中的函数并返回所有必要的内容)。这肯定会有所帮助。
标签: python python-3.x