我在这种格式的python中有一个字典:
{
"intents": [
{
"name": "ER111-Test1",
"created": "2017-08-18T18:09:36.155Z",
"updated": "2017-08-18T18:09:41.755Z",
"description": null
},
{
"name": "ER2222-Test2",
"created": "2017-08-18T18:05:48.153Z",
"updated": "2017-08-18T18:06:06.004Z",
"description": null
}
],
"pagination": {
"refresh_url": "/v1/workspaces/9978a49e-ea89-4493-b33d-82298d3db20d/intents?version=2017-08-21"
}
}
我正在尝试删除“ER111”和“ER2222”值并重新上传。我从IBM Watson的API运行this方法。
代码99%有效,但不允许我在最后一步上传。
response = ...
names = [d['name'] for d in response['intents']]
for name in names:
fixed_name = re.sub('ER\d{4,5}-', ' ', name) #this works to remove the prefix
print(name + ' ' + fixed_name) #testing it works, it does
response = conversation.update_intent(workspace_id='1234567',
intent=str(name),
new_intent=str(fixed_name)) #fails here with code 400
在最后一行,我们以“错误:无效的请求正文,代码:400”失败。如果我硬编码值而不是使用变量,它可以工作。我试过添加引号和其他一些东西,但似乎无法让它发挥得很好。
任何可能导致此问题的想法?
答案 0 :(得分:1)
因此看起来Watson不喜欢您发送的数据中的前导空格。对于初学者,请看一下 -
fixed_name = re.sub('ER\d{4,5}-', ' ', name)
# ^
由于name
以ER...
开头,因此此模式将替换为前导空格。你应该做的是用空字符串''
替换。
然而,更好的方法是使用-
分割第一个str.split
。这是如何 -
>>> "ER111-Test1".split('-', 1)[-1]
'Test1'