在 Python 中对字符串使用 .format 时出现 KeyError [重复]

Posted

技术标签:

【中文标题】在 Python 中对字符串使用 .format 时出现 KeyError [重复]【英文标题】:KeyError when using .format on a string in Python [duplicate] 【发布时间】:2014-01-07 12:38:39 【问题描述】:

我有一个字符串,我想在运行时使用 python 的 .format 函数在其中添加一些变量,这是我的字符串:

'"auth": "tenantName": "Insert String Here", "passwordCredentials": "username": "insert String here", "password": "insert String Here"'

当我像这样使用 .format 时:

credentials='"auth": "tenantName": "tenant", "passwordCredentials": "username": "admin", "password": "password"'.format(tenant='me',admin='test',password='123')

它给了我以下错误:

KeyError: '"auth"'

有什么帮助吗?提前致谢。

【问题讨论】:

你能把你的完整代码放在这里吗?? 你需要转义多余的s 这是到目前为止的完整代码。我只需要调整我指定的 3 个字符串。 我不认为 format 可以处理嵌套的大括号。你需要那些不适合变量的。 多余的''@desiredlogin在哪里 【参考方案1】:

我认为牙套可能会害死你。如果您使用格式,它希望 中的内容是键。也就是说,我认为您不能在包含非格式化 `...' 的字符串中使用 .format,因为它不知道如何解析它。但是,您可以这样做:

credentials='["auth": ["tenantName": "tenant", "passwordCredentials": ["username": "admin", "password": "password"]]'.format(tenant='me',admin='test',password='123')

然后做一个

credentials.replace("[","")
credentials.replace("]","")

【讨论】:

这并不理想。请参阅文档:docs.python.org/2/library/string.html#formatstrings 确实这只会造成破坏。【参考方案2】:

是字符串格式化的特殊字符,正如您清楚地知道的,因为您将它们用于 tenantadminpassword。所有其他s 和s 都需要通过加倍来转义。试试:

credentials='"auth": "tenantName": "tenant", "passwordCredentials": "username": "admin", "password": "password"'.format(tenant='me',admin='test',password='123')

【讨论】:

谢天谢地,头疼了半天终于找到了你的答案!【参考方案3】:

.format 函数被你多余的 大括号阻塞了。它正在寻找那些大括号来指示要搜索和替换的内容,因此当它看到这些大括号时,它认为它正在寻找要替换的键。

您需要转义不表示键的大括号。对于 .format,这是通过将大括号加倍来完成的。所以你的代码应该是这样的:

credentials='"auth": "tenantName": "tenant", "passwordCredentials": "username": "admin", "password": "password"'.format(tenant='me',admin='test',password='123')

查看文档:http://docs.python.org/2/library/string.html#formatstrings

另请参阅此问题: How can I print literal curly-brace characters in python string and also use .format on it?

【讨论】:

@BurhanKhalid 它不需要代码,这显然是一个固定的 json 数据结构。【参考方案4】:

您的字符串以"auth" 开头。一旦格式字符串解析器看到打开的花括号,它就会认为"auth" 是传递给.format() 的格式变量的名称。您需要使用双花括号转义模板字符串中的任何花括号,例如

也就是说,您似乎正在尝试构建 JSON 字符串。只需为此使用 json 模块。

【讨论】:

【参考方案5】:

您在交易中使用了错误的工具。您正在处理json,您需要使用 json 库来解析您的数据,然后将您的字段作为字典访问

>>> import json
>>> data_dict = json.loads(data)
>>> data_dict["auth"]["tenantName"]
u'Insert String Here'

【讨论】:

以上是关于在 Python 中对字符串使用 .format 时出现 KeyError [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 FOR 循环中对 Python Pandas 列表中的元素执行字符串更改

Python:在 Unicode 转义字符串上使用 .format()

python-字符串的格式化

python字符串的format函数如何使用?

Python之路--Python中应该使用%还是format来格式化字符串?

python中的printf:%号拼接字符串和format函数