在 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】: 和
是字符串格式化的特殊字符,正如您清楚地知道的,因为您将它们用于
tenant
、admin
和 password
。所有其他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()