TypeError:__ init __()得到了一个意外的关键字参数

时间:2012-12-25 08:22:22

标签: python google-app-engine typeerror keyword-argument

以下是我用于表单的代码,用于将新案例输入GAE数据存储区。当我尝试输入表单时,我得到下面的类型错误,说我正在使用意外的关键字参数。我是python的新手,GAE有没有人知道我做错了什么?

class Case(db.Model):
    user = db.StringProperty(required = True)
    title = db.StringProperty(required = True)
    facts = db.TextProperty()
    holding = db.TextProperty()
    rule_of_law = db.TextProperty()
    general_notes = db.TextProperty()
    key_concepts = db.TextProperty()        

class NewCase(Handler):
    def get(self,title="",
            facts="",
            holding="",
            rule_of_law="",
            general_notes="",
            key_concepts="",
            error=""):

        if self.user:
            self.render('newcase.html', title=title,
                        facts=facts,
                        holding=holding,
                        rule_of_law=rule_of_law,
                        general_notes=general_notes,
                        key_concepts=key_concepts,
                        error=error)
        else:
            self.redirect('/login')

def post(self):
    if not self.user:
        self.redirect('/')

    user = self.read_secure_cookie('user_id')    
    self.title = self.request.get('title')
    self.facts = self.request.get('facts')
    self.holding = self.request.get('holding')
    self.rule_of_law = self.request.get('rule_of_law')
    self.general_notes = self.request.get('general_notes')
    self.key_concepts = self.request.get('key_concepts')

    if self.title:
        c = Case(user = user,
                 title = self.title,
                 facts = self.facts,
                 holding = self.holding,
                 rule_of_law = self.rule_of_law,
                 general_notes = self.general_notes,
                 key_concepts = self.key_concepts)

        c.put()

        self.redirect('/%s' % c.key().id())

    else:
        error = "You must enter a title."
        self.render('newcase.html',title = self.title,

我得到的错误:

File "C:\Users\Chris\Documents\Web Apps\legalstudybuddy\main.py", line 233, in post
    key_concepts = self.key_concepts)
TypeError: __init__() got an unexpected keyword argument 'rule_of_law'

2 个答案:

答案 0 :(得分:2)

我假设你正在使用Django模板。 来自:https://developers.google.com/appengine/docs/python/gettingstarted/templates

  

template.render(path, template_values)获取模板文件和值字典的文件路径,并返回呈现的文本。

请注意,render只接受两个参数:您提供的模板路径,以及包含模板所需的所有其他值的单个字典。

您将所有这些值作为参数提供,而不是打包到字典中。

变化:

self.render('newcase.html', title=title, facts=facts, holding=holding, ... )

为:

self.render('newcase.html', {title=title, facts=facts, holding=holding, ...})

,类似于任何其他渲染调用。

答案 1 :(得分:1)

遇到同样的问题后,我发现我的问题出在webapp2.WSGIApplication路由定义中。

我已将我的路线定义如下,例如:

webapp2.Route('/api/something/anEndpoint', handlers.SomethingEndpointHandler)

然而,甚至没有达到该路线,因为另一条路线捕获了路线列表中早先定义的正则表达式关键字,而是被触发:

webapp2.Route('/api/something/<something_id>', handlers.SomethingElseHandler)

这导致OP中的TypeError出现意外的关键字参数&#39; something_id&#39;。

一个非常难以调试的错误,但希望这有助于某人!