python参数采用3个参数?哪里?

时间:2010-10-27 03:22:58

标签: python arguments urllib

我正在使用google safebrowsing api和以下代码:

def getlist(self, type):
    dlurl = "safebrowsing.clients.google.com/safebrowsing/downloads?client=api&apikey=" + api_key + "&appver=1.0&pver=2.2"
    phish = "googpub-phish-shavar"
    mal = "goog-malware-shavar"
    self.type = type
    if self.type == "phish":
        req = urllib.urlopen(dlurl, phish )
        data = req.read()
        print(data)

产生以下追溯:

File "./test.py", line 39, in getlist
  req = urllib.urlopen(dlurl, phish )
File "/usr/lib/python2.6/urllib.py", line 88, in urlopen
return opener.open(url, data)
File "/usr/lib/python2.6/urllib.py", line 209, in open
return getattr(self, name)(url, data)
TypeError: open_file() takes exactly 2 arguments (3 given)

我在这里做错了什么?我无法发现传递3个参数的位置。 顺便说一句,我打电话给

x = class()
x.getlist("phish")

2 个答案:

答案 0 :(得分:4)

基本上,你没有在url中提供方法,所以Python认为它是一个文件URL,并试图将其作为文件打开 - 这不起作用(并在此过程中抛出一个令人困惑的错误消息)失败的。)

尝试:

dlurl = "http://safebrowsing.clients.google.com/safebrowsing/downloads?client=api&apikey=" + api_key + "&appver=1.0&pver=2.2"

答案 1 :(得分:0)

urllib.urlopen函数打开一个由URL表示的网络对象以供阅读。如果URL没有方案标识符,则会打开一个文件。

在第88行调用适当的开启者,这导致在209开启open_file。

如果你看一下这个功能:

  def open_file(self, url):
        """Use local file or FTP depending on form of URL."""

答案:你应该提供像http:// ...

这样的计划