, поэтому у меня есть несколько объектов 5 'Player', создаваемых в начале моего кода, и около 24 различных объектов 'Skill' для каждого объекта 'Player', я использую это для l oop через мой код
first_run = True
while True:
for i in range(len(player_name)):
if first_run is True:
player[i] = Player(player_name[i], player_url[i], player_thumbnail[i])
print(player[i].name, "'s Object Created")
data = requests.get(player_url[i])
statusCheck(data.status_code, player_name[i])
data_processed = re.split(', |\n', data.text)
storeData(data_processed, player[i], first_run)
logging.info("Sleeping for 10 Seconds")
time.sleep(10)
first_run = False
в основном при первом прохождении этого, в то время как l oop, он создаст 5 объектов игрока с предопределенными именами, которые хранятся в списке выше. теперь, когда мой код достигает storeData(data_processed, player[i], first_run)
, возникает проблема в этой функции, проблема, говорящая, что атрибут, созданный при создании первого объекта игрока, не существует, он работал абсолютно идеально, а затем внезапно он перестал работать, я даже не изменил что-нибудь и внезапно он больше не работает, вот функция "storeData" (далее ниже - ошибка журнала)
def storeData(data_processed, player, first_run):
line_count = 0
for line in data_processed:
if line != '':
skill_data = line.split(',')
if line_count < 24:
player_skill = None
player_skill = getattr(player, skills[line_count])
player_skill.rank = skill_data[0]
player_skill.level = skill_data[1]
player_skill.xp = skill_data[2]
line_count = line_count + 1
if player_skill.last_level != player_skill.level and first_run is not True:
logging.info(player.name, "Gained A Level in ", skills[line_count])
pushLevelUp(discordUrl,skills[line_count-1], player, player_skill)
player_skill.last_level = skill_data[1]
elif line_count < 79:
player_activity = getattr(player, activity[line_count - 24])
player_activity.last_count = player_activity.count
player_activity.rank = skill_data[0]
player_activity.count = skill_data[1]
line_count = line_count + 1
ниже - ошибка журнала, я ничего не менял, как я сказал , но он больше не находит player.skill.O Total (с помощью getattr)
Traceback (most recent call last):
File "*hidden*", line 42, in <module>
storeData(data_processed, player[i], first_run)
File "*hidden*", line 142, in storeData
player_skill = getattr(player, skills[line_count])
AttributeError: 'NoneType' object has no attribute 'Overall'
Process finished with exit code 1
это списки, в которых я храню данные для «навыков»
skills = ['Overall', 'Attack', 'Defence', 'Strength', 'Hitpoints', 'Ranged', 'Prayer', 'Magic', 'Cooking',
'Woodcutting', 'Fletching', 'Fishing', 'Firemaking', 'Crafting', 'Smithing', 'Mining', 'Herblore',
'Agility', 'Thieving', 'Slayer', 'Farming', 'Runecrafting', 'Hunter', 'Construction']
вот краткое изложение
player_skill = getattr(player, skills[line_count])
на первой итерации должно указывать непосредственно на объект игрока, переданный в функцию storeData
, для этого примера я использую "player" в качестве имени объекта .. . getattr на первой итерации должен указывать прямо на player.Overall
, что позволило бы мне вызвать player.Overall.level
, однако он говорит, что не может найти player.Overall
при использовании player_skill = getattr(player, skills[line_count])
здесь a re мои файлы .py https://pastebin.com/q2VEFGfk (это файл с именем 'runebotClassData'), а этот https://pastebin.com/h7BEckgR (runebotTest.py)
как я уже сказал, Я ничего не изменил, похоже, что api возвращает данные в обычном режиме, и возникает эта ошибка, пожалуйста, помогите