لماذا أحصل على خطأ "typeerror: method () يأخذ وسيطة واحدة بالضبط (2 معطى) في Python باستخدام دليل API؟

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

سؤال

أحاول كتابة برنامج نصي لسطر الأوامر يعمل مع وحدات المؤسسة في مجال تطبيقات Google. لذلك ، باستخدام العديد من الوثائق المعقدة من Google على هذا ، قمت بإنشاء التطبيق بنجاح في وحدة التحكم API ، و reduction 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" ، ولكن بعد ذلك يشكو الخطأ من أنني لم أقدم ذلك. أي مساعدة سيكون موضع تقدير ، لم أستخدم بيثون منذ فترة طويلة جدًا ؛ قد يكون خطأ المستخدم جيدًا.

هل كانت مفيدة؟

المحلول

أنا لست على دراية بآبار واجهة برمجة تطبيقات تطبيقات 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