Python对象方法无法读取完整列表

时间:2016-05-27 19:47:47

标签: python

我已经编写了一个程序来解析文件中有关对象的信息,但它始终无法读取文件列表中的最后一项,我不确定原因。

对象的计算方法(有问题的方法)取决于以下字典(为简约而删节):

S_dict = {'Advanced Saucecrafting': 5, 'The Way of Sauce': 3}

对象本身是

class Character(object):

    def __init__(self, name, idnum):
        self.name = name
        self.idnum = idnum
        self.path = 'C:\\Users\\Bit\\Desktop\\Mafia\\data\\BtS_' + name + ' (#' + idnum + ')' + '.txt'
        self.SC = 0
        self.TT = 0
        self.P  = 0
        self.S  = 0
        self.DB = 0
        self.AT = 0
        self.skills = [self.SC, self.TT, self.P, self.S, self.DB, self.AT]
        self.SC_skills = []
        self.TT_skills = []
        self.P_skills  = []
        self.S_skills  = []
        self.P_skills  = []
        self.DB_skills = []
        self.AT_skills = []

    def compute(self):
        self.SC = 0
        self.TT = 0
        self.P  = 0
        self.S  = 0
        self.DB = 0
        self.AT = 0
        self.SC_skills = []
        self.TT_skills = []
        self.P_skills  = []
        self.S_skills  = []
        self.P_skills  = []
        self.DB_skills = []
        self.AT_skills = []

        with open(self.path, 'r') as f:
            text = f.read()
            perms = text.split(', ')
            for p in perms:
                try:
                    self.SC += SC_dict[p]
                    self.SC_skills.append(p)
                except KeyError:
                    pass
                try:
                    self.TT += TT_dict[p]
                    self.TT_skills.append(p)
                except KeyError:
                    pass
                try:
                    self.P += P_dict[p]
                    self.P_skills.append(p)
                except KeyError:
                    pass
                try:
                    self.S += S_dict[p]
                    self.S_skills.append(p)
                except KeyError:
                    pass
                try:
                    self.DB += DB_dict[p]
                    self.DB_skills.append(p)
                except KeyError:
                    pass
                try:
                    self.AT += AT_dict[p]
                    self.AT_skills.append(p)
                except KeyError:
                    pass
            self.skills = [self.SC, self.TT, self.P, self.S, self.DB, self.AT]

当我一直运行计算时,并且强大地无法读取我读取的.txt文件中的最后一个元素,它失败的示例文件位于

之下
Perfect Freeze, The Long View, Wisdom of the Elder Tortoises, Ambidextrous Funkslinging, Pulverize, Snokebomb, Subtle and Quick to Anger, The Way of Sauce, Torso Awaregness, Advanced Cocktailcrafting, Kung Fu Hustler, Cannelloni Cocoon, The Ode to Booze, Transcendental Noodlecraft, Master of the Surprising Fist, Spirit of Ravioli, Pastamastery, Advanced Saucecrafting

在这种情况下,向量self.skills返回

  

[4,8,10,3,9,6]

但是self.skills [3]是3,当你看到S_dict时,你会发现它拥有钥匙' Advanced Saucecrafting'和#'酱汁的方式'它应该总共给出3 + 5 = 8.此外,属性self.S_skills只是[' Advanced Saucecrafting']表明for循环的这一部分永远不会在计算方法中运行,这是更多的证据让我怀疑违规问题隐藏在其中。

1 个答案:

答案 0 :(得分:2)

问题是最后一个字符串(来自拆分)有一个换行符,这会导致键查找错误。试着这样做:

perms = text.rstrip().split(', ')

为我提供了这个技能输出:

[4, 8, 10, 8, 9, 6]