【问题标题】:unicode string format misterious KeyError. What's wrong?unicode 字符串格式神秘的 KeyError。怎么了?
【发布时间】:2014-04-15 21:55:23
【问题描述】:

我在 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。
我已经阅读了很多论坛仍然无法弄清楚我做错了什么。 :(

我该如何解决这个问题?

【问题讨论】:

  • 这是我通常的做法:'%(mykey)s' % {'mykey': 'myvalue'}
  • 是的,但这是旧语法。
  • format 采用 kwargs 而不是命名字符串值的字典
  • 是的,我刚开始写答案,谢谢!橡皮鸭的作品! :)
  • “旧语法”没有被弃用,非常好用。

标签: python django python-unicode keyerror


【解决方案1】:

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】:

    你也可以在原地解压存储的字典:

    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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-27
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 2015-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多