Почему я получаю ошибку "TypeError: Method () занимает ровно 1 аргумент (2 данного) в Python, используя API каталогов?

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

Вопрос

Я пытаюсь написать сценарий командной строки, который работает с организационными единицами в нашем домене Google Apps. Поэтому, используя множество запутанной документации от Google по этому поводу, я успешно создал приложение в консоли API, включил Admin SDK и успешно подключился к моему сценарию. Однако, когда я создаю объект службы каталогов (который кажется успешным), у меня возникают проблемы, взаимодействующие с ним, потому что я получаю это сообщение. Я также установил пакет Python API. Вот мой текущий код:

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

Когда я запускаю этот код, я получаю сообщение об ошибке:

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

Я пытался, не используя псевдоним "my_customer", но затем ошибка жалуется на то, что я не предоставил его. Любая помощь будет оценена, я не использовал Python очень долго; Это очень хорошо может быть ошибкой пользователя.

Это было полезно?

Решение

Я не знаком с API API Google, но кажется, что

orgunits.list () определяется как:

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

Так что, если я запускаю эти команды:

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

Поэтому в следующий раз, когда вы увидите ошибку, попробуйте добавить имя параметра в свой список аргументов и посмотрите, решает ли это ваша проблема.

Дополнительная информация:

Оператор распаковки словаря (**) не действует как обычный аргумент в списке параметров. Если вы передаете позиционный аргумент, когда это единственный аргумент в списке, то он вынесет ошибку (как вы видели), потому что вместо этого код ожидает аргумента ключевого слова.

Оператор распаков может принять произвольные аргументы ключевых слов и использовать их в словаре.

Другие советы

Может ли быть, что Питон проходит self автоматически? Я также немного новичок в Python, поэтому я не уверен, когда Python это делает, но это вызвало некоторую путаницу для меня в прошлом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top