Python参数为何需要三个参数?在哪里?
我正在使用谷歌的安全浏览 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)
我哪里做错了呢?我看不出哪里传了三个参数。顺便说一下,我是用下面的方式来调用这个的:
x = class()
x.getlist("phish")
2 个回答
0
函数 urllib.urlopen 用来打开一个网络对象,这个对象是通过一个网址(URL)来表示的,目的是为了读取数据。如果这个网址没有指定协议,比如说没有写 http://,那么它就会把这个网址当成一个文件来打开。
在代码的第88行,会调用合适的打开器,然后在第209行会调用打开文件的功能。
如果你查看这个函数:
def open_file(self, url):
"""Use local file or FTP depending on form of URL."""
答案是:你应该提供一个协议,比如 http://...
4
简单来说,你没有在网址里提供一个方法,所以Python以为这是一个文件的网址,结果它试着把它当成文件来打开——这就不行(而且在失败的时候还会出现让人困惑的错误信息)。
你可以试试:
dlurl = "http://safebrowsing.clients.google.com/safebrowsing/downloads?client=api&apikey=" + api_key + "&appver=1.0&pver=2.2"