2014-04-19 18 views
22

Non riesco a credere che questo sia effettivamente un problema, ma ho cercato di eseguire il debug di questo errore e non ho ottenuto nulla. Sono sicuro che mi manca qualcosa di veramente semplice perché sembra così sciocco.python object() non ha parametri errore

import Experiences, Places, Countries 
class Experience(object): 

    def make_place(self, place): 
     addr = place["address"] 
     addr = Places.ttypes.Address(addr["street"], addr["city"], addr["state"], Countries.ttypes._NAMES_TO_VALUES[addr["country"]], addr["zipcode"]) 
     ll = Geocoder.geocode(addr["street"]+", "+addr["city"]+", "+addr["state"]+" "+addr["zipcode"]) 
     place["location"] = Places.ttypes.Location(ll[0].coordinates[0], ll[0].coordinates[1]) 

    def __init__(self, exp_dict): 
     exp_dict["datetimeInterval"] = Experiences.ttypes.DateTimeInterval(remove(exp_dict, "startTime"), remove(exp_dict, "endTime")) 
     exp_dict["type"] = Experiences.ttypes.ExperienceType.OPEN 
     exp_dict["place"] = self.make_place(exp_dict["place"]) 
     self.obj = Experiences.ttypes.Experience(**exp_dict) 

@client.request 
@client.catchClientException 
def addExperience(thrift, access_token, exp_dict): 
    experience = Experience(exp_dict) 
    return thrift.client.addExperience(thrift.CLIENT_KEY, access_token, experience.obj) 

(I due decoratori corrispondenti a addExperience sono perché questo è definito al di fuori del file in cui viene dichiarata la sua classe.)

L'errore che sto ottenendo è:

experience = Experience(exp_dict) 
TypeError: object() takes no parameters 

Così questo non ha senso per me perché sto chiaramente dichiarando un secondo argomento alla funzione init. Qualsiasi aiuto sarebbe fantastico!

Traceback (most recent call last): 
    File "/Users/phil/Hangify/hy-frontend-server/env/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__ 
    return self.wsgi_app(environ, start_response) 
    File "/Users/phil/Hangify/hy-frontend-server/env/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app 
    response = self.make_response(self.handle_exception(e)) 
    File "/Users/phil/Hangify/hy-frontend-server/env/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception 
    reraise(exc_type, exc_value, tb) 
    File "/Users/phil/Hangify/hy-frontend-server/env/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app 
    response = self.full_dispatch_request() 
    File "/Users/phil/Hangify/hy-frontend-server/env/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
    File "/Users/phil/Hangify/hy-frontend-server/env/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception 
    reraise(exc_type, exc_value, tb) 
    File "/Users/phil/Hangify/hy-frontend-server/env/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request 
    rv = self.dispatch_request() 
    File "/Users/phil/Hangify/hy-frontend-server/env/lib/python2.7/site- packages/flask/app.py", line 1461, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
    File "/Users/phil/Hangify/hy-frontend-server/hangify/session.py", line 22, in check_login 
    return f() 
    File "/Users/phil/Hangify/hy-frontend-server/hangify/handlers/create.py", line 31, in Handle 
    res = exp.addExperience(hangify.thrift_interface, access_token, experience) 
    File "/Users/phil/Hangify/hy-frontend-server/hangify/client/__init__.py", line 22, in decorator 
    obj = func(client, *args, **kwargs) 
    File "/Users/phil/Hangify/hy-frontend-server/hangify/client/__init__.py", line 30, in decorator 
    return func(*args, **kwargs) 
    File "/Users/phil/Hangify/hy-frontend-server/hangify/client/exp.py", line 39, in addExperience 
    experience = Experience(exp_dict) 
TypeError: object() takes no parameters 

Ecco Experience.mro() - che dice che la posizione corretta del modulo-saggio della classe Experience:

[<class 'hangify.client.exp.Experience'>, <type 'object'>] 

Ed ecco dir (Experience):

['__class__', '__delattr__', '__dict__', '__doc__', '__format__', 
'__getattribute__', '__hash__', '__init__', '__module__', '__new__', 
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', 
'__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'make_place'] 
+0

Che cos'è "Esperienze" e che cosa è "Experiences.ttypes"? – BrenBarn

+0

Esperienze importate – eatonphil

+0

Ma non è rilevante, penso. Ad esempio, quando ho rimosso l'oggetto dalla catena di ereditarietà, l'errore è diventato "TypeError: questo costruttore non accetta argomenti" – eatonphil

risposta

39

Hai schede e spazi misti. __init__ è effettivamente definito nidificato all'interno di un altro metodo, pertanto la classe non ha un metodo __init__ e chiama invece object.__init__. Apri il tuo codice in Blocco note invece di qualsiasi editor che stai usando, e vedrai il tuo codice come le regole di gestione delle schede di Python lo vedono.

Questo è il motivo per cui non dovresti mai mischiare tab e spazi. Attenersi a uno o l'altro. Gli spazi sono raccomandati.

+0

Sapevo che doveva essere qualcosa di stupido in quel modo. Grazie per la saggezza! – eatonphil

1

È necessario premere due volte alla spina e (_) chiave di volta in volta, si deve apparire come:

__init__ 
+2

La domanda contiene il diritto '__init__'. – igaurav

16

ho lottato per un po 'di questo. Stupida regola per __init__. Sono due "_" insieme per essere "__"

+4

Ho ricevuto questo errore perché ero sciatto e ho scritto solo '__init()' – citynorman

+1

Ho ricevuto questo errore perché ero sciatto e ho scritto solo ** _ init _() ** –

+1

Ho ricevuto questo errore perché ero sciatto e ho scritto '___ init ___()'. – kennycoc

0

Anche io ho ricevuto questo errore. Per inciso, ho digitato __int__ anziché __init__.

Penso che, in molti casi di errore di digitazione, l'IDE che sto utilizzando (IntelliJ) avrebbe cambiato il colore sul set predefinito per la definizione della funzione. Ma, nel mio caso __int__ essere un altro dunder/metodo magico, il colore è rimasto uguale a quello che visualizza IDE per __init__ (standard predefinito colore definizione articolo), che mi ha portato un po 'di tempo nell'individuare i dispersi i.

Problemi correlati