Python中的关键字参数

时间:2013-08-14 07:26:06

标签: python beautifulsoup urllib2 keyword-argument

所以我试图使用urllib2 / BeautifulSoup从维基百科页面读取数据。我将此代码复制到终端:

import urllib2

hdrs = { 'User-Agent': "Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11" } 
req = urllib2.Request("http://en.wikipedia.org/wiki/List_of_United_States_mobile_phone_companies" , headers = hdrs)
fd = urllib2.urlopen(req) 

工作正常。但是,当我进行此调用(删除关键字参数)时:

req = urllib2.Request("http://en.wikipedia.org/wiki/List_of_United_States_mobile_phone_companies" , hdrs)

我收到错误:

 TypeError: must be string or buffer, not dict

为什么会这样?我认为关键字参数在函数调用中是可选的。谢谢你的帮助!

3 个答案:

答案 0 :(得分:5)

urllib2.Request的第二个参数是数据,而不是标题。

class urllib2.Request(url[, data][, headers][, origin_req_host][, unverifiable])

要指定标题而不指定数据,您应该使用关键字参数形式。

答案 1 :(得分:2)

来自文档:

urllib2.Request(url[, data][, headers][, origin_req_host][, unverifiable])

你可以这样做:

req = urllib2.Request("<url>", None, hdrs)

答案 2 :(得分:2)

urllib2的请求函数的结构是:

urllib2.Request(url[, data][, headers][, origin_req_host][, unverifiable])

当您在python中调用函数时,您需要提供参数的名称,例如urllib2.request(headers = hdrs, url = my_url)

或者您需要按照函数定义中给出的顺序提供参数。

因此,在你的第二个函数python中,假设你将hdrs作为data参数的值,因此数据类型不匹配。