Python 2.7 为什么urllib2不接受我的URL?

Python 2.7 为什么urllib2不接受我的URL?,python-2.7,urllib2,Python 2.7,Urllib2,我将URL存储在一个列表中,该列表应该传递给urllib2。然而,urllib似乎不太喜欢这个,我就是不明白为什么 以下是我得到的: url = list[1] response = urllib2.urlopen(url) html = response.read() 该URL是一个google maps Directions Web API URL,类型如下: http://maps.googleapis.com/maps/api/directions/json?origin=[origi

我将URL存储在一个列表中,该列表应该传递给urllib2。然而,urllib似乎不太喜欢这个,我就是不明白为什么

以下是我得到的:

url = list[1]
response = urllib2.urlopen(url)
html = response.read()
该URL是一个google maps Directions Web API URL,类型如下:

http://maps.googleapis.com/maps/api/directions/json?origin=[origin]&destination=[destination]&waypoints=optimize:true|[waypoint1]|[waypoint2]&sensor=false
现在,如果我尝试运行此操作,检索到的html总是如下所示:

{
"routes" : [],
"status" : "INVALID_REQUEST"
}
         "warnings" : [],
         "waypoint_order" : [ 2, 0, 7, 5, 6, 4, 3, 1 ]
      }
   ],
   "status" : "OK"
}
表示传递的URL有问题。但是,如果我获取URL并直接分配它,如下所示:

url = "http://maps.googleapis.com/maps/api/directions/json?origin=[origin]&destination=[destination]&waypoints=optimize:true|[waypoint1]|[waypoint2]&sensor=false"
response = urllib2.urlopen(url)
html = response.read()
结果将很高兴地通过(对我来说)基本的最终部分,如下所示:

{
"routes" : [],
"status" : "INVALID_REQUEST"
}
         "warnings" : [],
         "waypoint_order" : [ 2, 0, 7, 5, 6, 4, 3, 1 ]
      }
   ],
   "status" : "OK"
}
因此,我(希望不是太愚蠢)的问题是:当URL被直接分配时,为什么urllib做它的工作,而不是如果它来自一个列表

非常感谢您的帮助, J


PS:论坛软件总是切断我的“大家好”问候语有什么原因吗?

我终于解决了这个问题

有一次我退了一步,又想了想,这很容易: 我确实从谷歌的Web API中得到了答案,这意味着urllib2确实通过了一些东西。但是,它一定向API后端发送了一些毫无意义的东西。包含德语地址的URL我幸运地猜到问题是由umlauts引起的

因此,我只是通过一个函数传递了我的URL,将每个umlaut替换为它的非umlaut替代项,然后突然间一切都正常了

如果有人遇到类似的问题,我是这样解决的:

# Function for replacing all umlauts
def replaceUmlauts(text):
    dic = {'Ä':'Ae', 'ä':'ae', 'Ö':'Oe', 'ö':'oe', 'Ü':'Ue', 'ü':'ue', 'ß':'ss'}
    for i, j in dic.iteritems():
        text = text.replace(i, j)
    return text
然后简单地使用

response = urllib2.urlopen(replaceUmlauts(url))

我建议列表[1]与字符串不同。另外,我建议您不要将数组命名为“list”,因为它是一种类型。干杯,moopet,在我的代码列表中[1]实际上并没有被命名,我只需要匿名一点;)关于列表[1]不等于我的URL:这怎么可能,因为我使用“打印列表[1]”让python打印相应的字符串,然后将其复制到它工作的地方…?Re:“ps”-人们可能会编辑它,因为这里不需要问候和感谢。还有问题。你确定列表[1]的值等于你尝试的文本字符串吗?嗯,我想我不是:)我怀疑不是,但我不知道如何测试它?如果我让脚本使用python的“打印列表[1]”,它将生成我复制粘贴的内容。我将如何测试它?