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