Warum erhalte ich die Fehlermeldung „TypeError:method() benötigt genau 1 Argument (2 gegeben) in Python unter Verwendung der Directory API?

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

Frage

Ich versuche, ein Befehlszeilenskript zu schreiben, das mit Organisationseinheiten innerhalb unserer Google Apps-Domäne funktioniert.Daher habe ich unter Verwendung der vielen komplizierten Dokumentationen von Google zu diesem Thema die Anwendung erfolgreich in der API-Konsole erstellt, das Admin SDK aktiviert und erfolgreich eine Verbindung innerhalb meines Skripts hergestellt.Wenn ich jedoch das Verzeichnisdienstobjekt erstelle (was erfolgreich zu sein scheint), habe ich Probleme bei der Interaktion damit, weil ich diese Nachricht erhalte.Ich HABE auch das Python-API-Paket installiert.Hier ist mein aktueller Code:

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')

Wenn ich diesen Code ausführe, erhalte ich die Fehlermeldung:

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

Ich habe es versucht, ohne den Alias ​​„my_customer“ zu verwenden, aber dann erscheint die Fehlermeldung, dass ich ihn nicht angegeben habe.Ich wäre für jede Hilfe dankbar, ich habe Python schon sehr lange nicht mehr verwendet;Es kann durchaus sein, dass es sich um einen Benutzerfehler handelt.

War es hilfreich?

Lösung

Ich bin mit der Google Apps-API nicht vertraut, aber es scheint so

orgunits.list() ist wie folgt definiert:

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

Wenn ich also diese Befehle ausführe:

>>> 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

Wenn Sie also das nächste Mal den Fehler sehen, versuchen Sie, den Parameternamen zu Ihrer Argumentenliste hinzuzufügen und prüfen Sie, ob das Problem dadurch behoben wird.

Mehr Informationen:

Der Operator zum Entpacken des Wörterbuchs (**) verhält sich nicht wie ein normales Argument in einer Parameterliste.Wenn Sie ein Positionsargument übergeben und dies das einzige Argument in der Liste ist, wird ein Fehler ausgegeben (wie Sie gesehen haben), da der Code stattdessen ein Schlüsselwortargument erwartet.

Der Unpack-Operator kann beliebige Schlüsselwortargumente akzeptieren und in einem Wörterbuch verwenden.

Andere Tipps

Könnte es sein, dass Python vorbei ist? self automatisch?Ich bin auch ein bisschen neu in Python, daher bin ich mir nicht sicher, wann Python das macht, aber es hat in der Vergangenheit bei mir für einige Verwirrung gesorgt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top