1
им получить ошибку типа и мой класс использует себя в своей функции дл()питон TypeError: дл() занимает ровно 4 аргумента (3 дано)
import urllib
import httplib
import os.path
###SAI22 Library###
def exists(site):
conn = httplib.HTTPConnection(site)
conn.request("HEAD",site)
response = conn.getresponse()
conn.close()
return response.status == 200
class sai_download:
def dl(self,_dir,_url,pck):
if pck == True:
if exists(_url) == True:
urllib.urlretrieve(_url,_dir)
if os.path.isfile(_dir) == True:
print "Download successful"
return True
else:
print "Download failed"
return False
else:
print "Url isnt valid"
return False
elif pck == False:
if exists(_url) == True:
urllib.urlretrieve(_url,_dir)
return True
if os.path.isfile(_dir) == True:
return True
else:
return False
else:
return False
Когда бегала я получаю ошибку типа, но я иметь себя в функции класса dl, что я делаю неправильно?
>>> s = sai_download()
>>> s.dl("C:\hh.html","http://stackoverflow.com/questions/82831/check-if-a-file-exists-using-python")
Traceback (most recent call last):
File "<pyshell#41>", line 1, in <module>
s.dl("C:\hh.html","http://stackoverflow.com/questions/82831/check-if-a-file-exists-using-python")
TypeError: dl() takes exactly 4 arguments (3 given)
>>>
Как примечание стороны, все те, '== true' сравнения не нужны; просто используйте 'if exists (_url):'. Или, в последнем примере, просто 'return os.path.isfile (_dir)'. – abarnert
Также очень странно называть все ваши параметры «частными» переменными с префиксами подчеркивания. Что не так с помощью 'def dl (self, dir, url, pck):'? Похоже, вы заимствуете идиому, сделанную для какого-либо другого языка (возможно, с неявным «я» или скрытыми глобалами в стиле JS), что не подходит для Python и просто делает ваш код менее читаемым. – abarnert
PS, вам нужно пустую строку перед отступом, чтобы отформатировать ее как код. (Я исправил это для вас, но для будущей справки ...) – abarnert