【问题标题】:How to pass unicode keywords to **kwargs如何将 unicode 关键字传递给 **kwargs
【发布时间】:2011-06-03 16:08:08
【问题描述】:

我是以下工作的例外。

def foo(**kwargs):
    print kwargs
foo(**{'a':'b'})
foo(**{u'a':'b'})

Traceback(最近一次调用最后一次): 文件“”,第 1 行,在 TypeError: m() 关键字必须是字符串

我做错了什么还是我应该修复它?

【问题讨论】:

  • foo() argument after ** must be a mapping, not set。我想你的意思是'a':'b'。你的平台是什么? python-2.7-8.fc14.1.x86_64 可以正常使用该修复程序。
  • 这对我来说在 Python 2.7.1 中运行得非常愉快
  • 我修复了问题中的错误。但问题依然存在,我运行的是 2.6,但它崩溃了。
  • 您正在运行 2.6.1(修订版 67515),问题 2646 在修订版 68805 中已修复。所以,再次:将您的 python 2.6 更新到最新版本(截至今天为 2.6.6)。

标签: python unicode keyword-argument


【解决方案1】:

升级到 Python 2.6.5 或更高版本。

【讨论】:

  • 是的。这是在 2.6 中修复的。更多信息:bugs.python.org/issue2646bugs.python.org/issue4978
  • @mipadi 假设示例应该是字典而不是集合文字似乎相当安全,因为给出的异常仅在这种情况下才有意义。异常只会在 2.6 之前发生。
  • 我正在运行 2.6(Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49))
  • 我不愿意支持答案。它至少应该整合@WillMcCutchen 的评论。
【解决方案2】:

升级对我来说不是一个选择,所以我根据需要在 dicts 上调用它--

def flatten_unicode_keys(d):
    for k in d:
        if isinstance(k, unicode):
            v = d[k]
            del d[k]
            d[str(k)] = v

【讨论】:

  • 我认为像这样的简单解决方法比公认的答案更有价值。
猜你喜欢
  • 1970-01-01
  • 2020-06-30
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 2020-07-12
  • 1970-01-01
  • 2017-02-06
  • 2014-04-18
相关资源
最近更新 更多