unicode字符串格式奇怪的KeyError。怎么了?

时间:2014-03-12 01:19:14

标签: python django python-unicode keyerror

我在django models.Model的unicode表示中有以下代码:

def __unicode__(self):
    if self.right:
        return u"{left} ({left_score}) | {right} ({right_score})".format({
            'left': self.left, 
            'left_score': self.left_score, 
            'right': self.right, 
            'right_score': self.right_score,
        })
    else:
        return "%s" % self.left

我得到了

Exception Type: KeyError
Exception Value: u'left'

我也尝试在字典中使用unicode键。 self.left不是None 我看过很多论坛仍然无法弄清楚我做错了什么。 :(

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

format方法要求您将参数作为kwargs传递,而不是作为字典传递。

def __unicode__(self):
    if self.right:
        return u"{left} ({left_score}) | {right} ({right_score})".format(
            left=self.left, 
            left_score=self.left_score, 
            right=self.right, 
            right_score=self.right_score,
        )
    else:
        return "%s" % self.left

答案 1 :(得分:1)

您还可以解压缩存储的字典:

left, right = 'L', 'R'
left_score, right_score = "LS", "RS"

print u"{left} ({left_score}) | {right} ({right_score})".format(**{
            'left': left, 
            'left_score': left_score, 
            'right': right, 
            'right_score': right_score,
        })

出:L (LS) | R (RS)