代码之家  ›  专栏  ›  技术社区  ›  Barney Szabolcs

unicode字符串格式misterius KeyError。发生了什么?

  •  2
  • Barney Szabolcs  · 技术社区  · 10 年前

    我在django模型的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 回复  |  直到 10 年前
        1
  •  4
  •   Tim Wakeham    10 年前

    这个 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
    
        2
  •  1
  •   m.wasowski    10 年前

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

    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)