在API调用中的格式字符串“遇到”ValueError:Single'}'的问题

时间:2016-06-15 17:16:08

标签: python python-3.x urllib string.format

我正在使用Python 3。

基本上,我正在使用urllib进行API调用并收到错误:

格式字符串“

中遇到

”ValueError:Single'}'

我已经研究过各种其他解决方案,但它们似乎没有用。

基本上我正在做的是:

import urllib.request
import urllib.parse

def query_person(first, last):
   person_request = urllib.request.urlopen('http://api.querysite.com/content/search/index:AUTHOR?query=authlast%28%27{last}}%27%29%20AND%20authfirst%28%27{first}}%27%29&'.format(first=first,last=last))
   return(person_request)

print(query_person("John", "Doe"))

实际的API将无法重现,因为它需要一个API密钥(显然可以忽略)以及需要在经过验证的网络上。

我认为这个问题与“{last}}%27%29%20AND%20authfirst%28%27 {first}}”有一个额外的括号。例如,如果我想在没有python或.format()的url栏中查询它,它看起来像:

http://api.querysite.com/content/search/index:AUTHOR?query=authlast%28%27Doe}%27%29%20AND%20authfirst%28%27John}%27%29&

或更具体地说: Doe}%27%29%20AND%20authfirst%28%27John}%27%29&

如果我在python中使用后一种方法,我没有问题,但它当然不允许我输入名称进行查询。

1 个答案:

答案 0 :(得分:3)

如果你希望它保留在字符串中,你需要加倍你的单支撑:

例如:

'{first}}}'.format(first='John') == 'John}'

在你的情况下:

person_request = urllib.request.urlopen('http://api.querysite.com/content/search/index:AUTHOR?query=authlast%28%27{last}}}%27%29%20AND%20authfirst%28%27{first}}}%27%29&'.format(first=first,last=last))