Perché sto ricevendo un errore "TypeEerror: Method () prende esattamente 1 argomento (2 dato) in Python usando l'API Directory?

StackOverflow https://stackoverflow.com/questions/19842347

Domanda

Sto tentando di scrivere uno script di riga di comando che funzioni con le unità organizzative all'interno del nostro dominio di Google Apps. Pertanto, utilizzando la documentazione contorta di Google su questo, ho creato correttamente l'applicazione nella console API, ho acceso l'SDK di amministrazione e ho collegato correttamente all'interno del mio script. Tuttavia, quando creo l'oggetto di servizio Directory (che sembra avere successo), ho problemi che interagiscono con esso perché ricevo quel messaggio. Ho installato anche il pacchetto API Python. Ecco il mio codice attuale:

import argparse
import httplib2
import os
import sys
from apiclient.discovery import build
from oauth2client.client import SignedJwtAssertionCredentials

f = file("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-privatekey.p12", "rb")
key = f.read()
f.close()

credentials = SignedJwtAssertionCredentials(
    "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@developer.gserviceaccount.com",
    key,
    scope = "https://www.googleapis.com/auth/admin.directory.orgunit"
)

http = httplib2.Http()
http = credentials.authorize(http)

directoryservice = build("admin", "directory_v1", http=http)
orgunits = directoryservice.orgunits()

thelist = orgunits.list('my_customer')

Quando eseguo quel codice ricevo il messaggio di errore:

Traceback (most recent call last):
  File "test.py", line 33, in <module>
    orgunits.list('my_customer')
TypeError: method() takes exactly 1 argument (2 given)

Ho provato senza usare l'alias "my_customer", ma poi l'errore si lamenta di non averlo fornito. Qualsiasi aiuto sarebbe apprezzato, non uso Python da molto tempo; Potrebbe essere molto bene l'errore dell'utente.

È stato utile?

Soluzione

Non ho familiarità con l'API di Google Apps, ma sembra

orgunits.list () è definito come:

class FactoryObject(object):
    # ... Code Here ...

    def list(self, **kwargs):
         if 'some_parameter' not in kwargs:
             raise Exception('some_parameter required argument')
         # ... code that uses kwargs['some_parameter']
         return True

Quindi se eseguo questi comandi:

>>> orgunits.list()
Exception: some_parameter required argument
>>> orgunits.list('my_customer')
TypeError: list() takes exactly 1 argument (2 given)
>>> orgunits.list(some_parameter='my_customer')
True

Quindi la prossima volta che vedi l'errore, prova ad aggiungere il nome del parametro all'elenco degli argomenti e vedi se questo risolve il tuo problema.

Maggiori informazioni:

L'operatore di dispack del dizionario (**) non agisce come un argomento normale in un elenco di parametri. Se si supera un argomento posizionale, quando questo è l'unico argomento nell'elenco, allora lancerà un errore (come hai visto) perché il codice si aspetta invece un argomento della parola chiave.

L'operatore Unpack può accettare argomenti arbitrari della parola chiave e usarli in un dizionario.

Altri suggerimenti

Potrebbe essere che Python stia passando self automaticamente? Sono anche un po 'nuovo per Python, quindi non sono sicuro di quando Python lo fa, ma in passato mi ha causato confusione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top