Python“;属性错误:';非类型';对象没有属性“;突然出现

Python“;属性错误:';非类型';对象没有属性“;突然出现,python,attributes,getattr,Python,Attributes,Getattr,因此,我在代码开始时创建了5个“玩家”对象,每个“玩家”对象大约有24个不同的“技能”对象,我用它来循环代码 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

因此,我在代码开始时创建了5个“玩家”对象,每个“玩家”对象大约有24个不同的“技能”对象,我用它来循环代码

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
基本上,在这个while循环的第一次运行中,它将创建5个具有预定义名称的player对象,这些名称存储在上面的列表中。现在,当我的代码到达
storeData(数据已处理,玩家[i],第一次运行)
时,它在该函数中遇到了一个问题,一个问题是在创建第一个玩家对象时创建的属性不存在,它工作得绝对完美,然后突然停止工作,我甚至没有改变任何东西,突然它不再工作了,下面是函数“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
这里是一个简短的概述

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\u skill=getattr(player,skills[line\u count])
在第一次迭代时应直接指向传递到
storeData
函数的player对象,例如,我使用“player”作为对象名。。。第一次迭代时的getattr应该直接指向
player.totall
,这将允许我调用
player.totall.level
,但是它表示在使用
player\u skill=getattr(player,skills[line\u count])时找不到
player.total

这是我的.py文件(这是名为“runebotClassData”的文件),这是(runebotTest.py)


正如我所说,我没有做任何更改,api似乎返回的数据与正常情况完全一样,而且错误正在发生,请帮助我哇,我完全忽略了这一点,我被错误蒙蔽了双眼,错误指向调用player[i]的位置,而不是定义它的位置,并且如果我的测试模式处于打开状态(first_run=False),则没有定义它我应该更加注意声明

哇,我完全忽略了这一点,我被指向调用player[i]的位置的错误蒙蔽了双眼,而不是它被定义的位置,如果我的测试模式是开启的,它也没有被定义(first_run=False)我应该更加注意声明

如果
首次运行
错误
那么
播放器[i]
仍然是
,它作为参数
播放器
交给
存储数据
,然后在一些附加条件下失败。哦,对不起,我想我当时正在测试,“first_run”的第一个定义应该是true,但每当我想测试时,我都会将其设置为false,因为它会立即在discord上打印嵌入的消息。如果我这样做,对不起,我是指声明,first_run的声明应该是=true,但即使它设置为true,问题仍然会发生。您可以检查“player”在“storeData”的开头为None,如果是,则引发“ValueError”。这至少会更早、更可靠地显示错误,以便找到其原因。不过,如果我记得它昨晚突然开始工作,我今天会做一些测试,如果是这样,可能是api的问题,但我很确定数据来源是正常的,如果
第一次运行
然后
播放器[i] 
保留
None
作为参数
player
移交给
storeData
,然后在一些附加条件下失败。哦,对不起,我想我当时正在测试“首次运行”的第一个定义应该是真的,但每当我想测试时,我都将其设置为false,因为它会立即在discord上打印嵌入的消息。如果我这样做,对不起,我是指声明,first_run的声明是指=true,但即使设置为true,问题仍然会发生。您可以检查“storeData”开头的“player”是否为None,并引发一个错误“ValueError”如果是这样的话。这至少会更早更可靠地显示错误,以便找到其原因。我今天会做一些测试,但是如果我记得它昨晚突然开始工作,如果是这样的话,可能是api的问题,但我很确定数据的来源是正常的
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']