3

我正在尝试编写一个与我们的 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;很可能是用户错误。

4

2 回答 2

12

我不熟悉谷歌应用 API,但似乎

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

因此,下次您看到错误时,请尝试将参数名称添加到您的参数列表中,看看是否能解决您的问题。

更多信息:

字典解包运算符 (**) 不像参数列表中的普通参数。如果你传递一个位置参数,当这是列表中唯一的参数时,它会抛出一个错误(就像你看到的那样),因为代码需要一个关键字参数。

unpack 运算符可以接受任意关键字参数并在字典中使用它们。

于 2013-11-07T17:36:56.190 回答
-2

会不会是 Pythonself自动通过了?我也是 Python 的新手,所以我不确定 Python 什么时候会这样做,但它在过去给我造成了一些困惑。

于 2013-11-07T17:18:48.347 回答