2014-12-13 3 views
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) 
>>> 
+0

Как примечание стороны, все те, '== true' сравнения не нужны; просто используйте 'if exists (_url):'. Или, в последнем примере, просто 'return os.path.isfile (_dir)'. – abarnert

+0

Также очень странно называть все ваши параметры «частными» переменными с префиксами подчеркивания. Что не так с помощью 'def dl (self, dir, url, pck):'? Похоже, вы заимствуете идиому, сделанную для какого-либо другого языка (возможно, с неявным «я» или скрытыми глобалами в стиле JS), что не подходит для Python и просто делает ваш код менее читаемым. – abarnert

+0

PS, вам нужно пустую строку перед отступом, чтобы отформатировать ее как код. (Я исправил это для вас, но для будущей справки ...) – abarnert

ответ

5

Необходимо определить параметр pck.

s.dl("C:\hh.html","http://stackoverflow.com/questions/82831/check-if-a-file-exists-using-python", True) 

или если вы хотите, чтобы сделать необязательный параметр со значением по умолчанию определяет метод как это:

def dl(self,_dir,_url,pck=True): 
Смежные вопросы