【问题标题】:Python error: __init__() takes at least 3 arguments (3 given)Python 错误:__init__() 至少需要 3 个参数(给定 3 个)
【发布时间】:2013-08-03 01:24:15
【问题描述】:

所以我正在开发保存配置文件功能,但我不确定为什么会收到以下错误:

__init__() takes at least 3 arguments (3 given)


这是它发生的函数(在它到达self.profiles.update line 之后):

@view_config(route_name="profile", request_method='POST')
def save_profile(self):
    try:
        json = self.request.json_body
        #username = str(json['userName'])
        first_name = str(json['firstName'])
        last_name = str(json['lastName'])
        phones = str(json['phones'])
        emails = str(json['emails'])
        self.profiles.update(self, firstName=first_name, lastName=last_name, emails=emails, phones=phones)
        value = {'result:': 'success', 'message': 'Profile Saved!'}
        self.respond(value)
        return self.route('profile')
    except Exception, err:
        print err
        value = {'result:': 'error', 'message': 'There was an error processing the request'}
        self.respond(value)
        return self.route('profile')

扩展控制台:

我对 init 进行了项目范围的搜索,这似乎是唯一匹配的函数

class WhoView(Extension):
    def __init__(self, context, request):
        self.session = request.session
        self.request = request
        self.status_code = 200
        self.content_type = "text/html"
        ctx = self.session.ctx
        self.request_context = context

        Extension.__init__(self, ctx)

    def attach_session(self, token):
        self.ctx.attach_session(token)

有什么想法吗?您需要查看的其他信息?

【问题讨论】:

  • 这并不能解决您的问题,但请注意,在您的程序中创建的每个对象都会调用 __init__——这是用于初始化(可变)对象的方法。
  • 完整的堆栈跟踪将非常有用。如果您必须捕获异常而不是让它传播,您可以使用sys.exc_info()[2] 来获取回溯。

标签: python pyramid mako


【解决方案1】:

您没有在任何地方重定向(self.route 进行重定向)。此外,您不能在此处重定向,因为您正在进行 ajax 调用。我很确定电话和电子邮件的分配不正确,因为您将数组转换为字符串。我们明天在办公室谈。同样正如 sza 指出的那样,您不会将 self 传递给方法调用。

@view_config(route_name="profile", request_method='POST')
def save_profile(self):
    try:
        json = self.request.json_body
        #username = str(json['userName'])
        first_name = str(json['firstName'])
        last_name = str(json['lastName'])
        phones = str(json['phones'])
        emails = str(json['emails'])
        self.profiles.update(firstName=first_name, lastName=last_name, emails=emails, phones=phones)
        value = {'result:': 'success', 'message': 'Profile Saved!'}
    except Exception, err:
        print err
        value = {'result:': 'error', 'message': 'There was an error processing the request'}

    #returns a json response
    return self.respond(value)

【讨论】:

  • 甜蜜!最后还必须从电话和电子邮件数组中删除 str
  • 是的,Leon 坐在我身后约 2 英尺处
【解决方案2】:

不是

self.profiles.update(self, firstName=first_name, lastName=last_name, emails=emails, phones=phones)

应该是

self.profiles.update(firstName=first_name, lastName=last_name, emails=emails, phones=phones)

【讨论】:

  • 是的,我不应该把 self 放进去
猜你喜欢
  • 2015-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-08
  • 2023-03-23
  • 1970-01-01
相关资源
最近更新 更多